关于c ++:编写跨平台代码时使用char *而不是void *的任何陷阱?

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

当使用char*编写跨平台的内存访问代码时,是否存在任何缺陷?

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

我正在研究一个播放内存分配器,以便更好地理解如何调试内存问题。我已经开始相信char*是更好的选择,因为它能够进行指针算术,并在void*上取消对它们的引用,这是真的吗?以下假设在不同的公共平台上是否始终正确?

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


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

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

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