编写交叉平台代码时,使用char*而不是void*的任何陷阱
Any pitfalls using char* instead of void* when writing cross platform code?
使用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)
绝对不能依赖 - 我知道它是错误的实现(虽然它们可能不完全符合标准,但这不是他们的问题之一)。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 为什么我在使用void函数时得到错误代码C2276
- void*到驱动程序中的UnicodeString
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 指针没有更新它在void函数内部指向的值
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 编写交叉平台代码时,使用char*而不是void*的任何陷阱