7

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

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

我正在开发一个播放内存分配器,以更好地了解如何调试内存问题。我开始相信 char* 更可取,因为它能够进行指针运算并取消对 void* 的引用,这是真的吗?以下假设在不同的常见平台上是否始终成立?

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

1 回答 1

5

sizeof(char)==1绝对永远是真的。

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

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

于 2012-10-24T05:01:17.597 回答