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

Ube*_*ose 7 c++ pointers cross-platform

使用char*编写进行内存访问的跨平台代码时是否有任何陷阱?

更新:例如,如果地址与该类型的大小对齐,我应该在将解除引用的char*转换为特定类型(例如int)之前进行检查吗?某些架构是否会在未对齐访问时返回奇怪的结果?

我正在开发一个播放内存分配器,以便更好地了解如何调试内存问题.我已经开始相信char*是优选的,因为能够进行指针运算并将它们取消引用而不是void*,这是真的吗?在不同的通用平台上,以下假设是否始终适用?

sizeof(char) == 1
sizeof(char*) == sizeof(void*)
sizeof(char*) == sizeof(size_t)
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 5

sizeof(char)==1 绝对是真的.

sizeof(char *) == sizeof(void *)可能永远也是如此.C标准要求它们具有相同的表示,至少强烈暗示相同的大小.

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

  • 使用intptr_t?"以下类型指定一个带符号的整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将等于原始指针" (2认同)