编写交叉平台代码时,使用char*而不是void*的任何陷阱

Any pitfalls using char* instead of void* when writing cross platform code?

本文关键字:void 陷阱 任何 char 使用 平台 代码      更新时间:2023-10-16

使用char*编写可访问内存访问的交叉平台代码时是否有陷阱?

更新:例如,如果地址与该类型的大小对齐,我是否应该在将污染物的char*施放给某种类型(例如int)之前检查一下?某些架构会在未对齐的访问时返回奇怪的结果吗?

我正在研究游戏内存分配器,以更好地了解如何调试MEMMORY问题。我开始相信Char*是优选的,因为有能力执行指针算术并在void*的情况下取消它们,这是真的吗?以下假设在不同的普通平台上始终保持正确吗?

sizeof(char) == 1
sizeof(char*) == sizeof(void*)
sizeof(char*) == sizeof(size_t)

sizeof(char)==1绝对是正确的。

sizeof(char *) == sizeof(void *) is 可能也始终是正确的。C标准要求它们具有相同的表示形式,至少强烈暗示着相同的大小。

sizeof(char *) == sizeof(size_t)绝对不能依赖 - 我知道它是错误的实现(虽然它们可能不完全符合标准,但这不是他们的问题之一)。