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

c – 编写跨平台代码时使用char *而不是void *的任何陷阱?,第1张

概述使用char *编写进行内存访问的跨平台代码时是否有任何陷阱? 更新:例如,如果地址与该类型的大小对齐,我应该在将解除引用的char *转换为某种类型(例如int)之前进行检查吗?某些架构是否会在未对齐访问时返回奇怪的结果? 我正在开发一个播放内存分配器,以便更好地了解如何调试内存问题.我开始相信char *是优选的,因为它能够进行指针运算并将它们取消引用而不是void *,这是真的吗?在不同的通 使用char *编写进行内存访问的跨平台代码时是否有任何陷阱?

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

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

sizeof(char) == 1sizeof(char*) == sizeof(voID*)sizeof(char*) == sizeof(size_t)
解决方法 sizeof(char)== 1绝对是真的.

sizeof(char *)== sizeof(voID *)也可能始终为true. C标准要求它们具有相同的表示,至少强烈暗示相同的大小.

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

总结

以上是内存溢出为你收集整理的c – 编写跨平台代码时使用char *而不是void *的任何陷阱?全部内容,希望文章能够帮你解决c – 编写跨平台代码时使用char *而不是void *的任何陷阱?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存