我知道我可以信赖sizeof(char) == 1
,但sizeof(uint32_t)
和sizeof(uint8_t)
呢? 不应该是32位(8位)大小的名字猜测? 谢谢!我可以依靠sizeof(uint32_t)== 4吗?
回答
固定大小的类型将永远是这个大小。如果你在一个不具有这种大小的整数类型的奇怪平台上,那么它们将是未定义的。
请注意,它不一定遵循sizeof(uint32_t) == 4
,如果CHAR_BIT != 8
;这只会发生在奇怪的平台上。
不,它完全依赖于你的编译器和体系结构(即它会给你不同的结果,你没有整数类型)。如果你得到CHAR_BIT == 8
那么是的,你可以依靠这一点。所以,如果你在64位体系结构上将与32位体系结构中的64位边界对齐,那么所有内容都将对齐到4个字节。
因此,如果数据大小很重要(例如一组位标志),请始终使用固定大小类型。
我不明白这一点。这是否意味着'malloc(sizeof(unit32_t)* x)'在64 vs 32 arch上请求“两倍的空间”? – user2864740
@ user2864740: - uint32_t的对齐要求必须小于或等于sizeof(uint32_t)。由于要求uintN_t类型中没有填充,因此sizeof(uint32_t)* CHAR_BIT == 32.其他任何内容都不符合C99。 –
那么它是否依赖(如答案中)或保证(如评论中)uint32_t? :> – user2864740
绝对不是,至少关于sizeof(uint32_t)
。 sizeof
返回字节数,而不是位数 ,如果平台上的字节是16位,则sizeof(uint32_t)
将是2,而不是4;如果一个字节是32位(并且实际上存在这样的平台 ),则sizeof(uint32_t)
将是1(并且uint32_t
可以是到unsigned char
的类型定义)。
当然,在这种情况下,uint8_t
将不会被定义。
但size_of返回*字节数*或*字符数*?当CHAR_BIT!= 8时它们是否是任何情况? – user2864740
@ user2864740'sizeof(char)'保证等于1. – rightfold
@ user2864740,在C/C++对象模型中,'char'是按字节定义的。 – ach
- 1. 我可以依靠mod_rewrite吗?
- 2. 我可以依靠MSXML4吗?
- 3. 我可以依靠malloc返回NULL吗?
- 4. 我可以依靠shell()的存在吗?
- 5. 我可以依靠模板类型吗?
- 6. 我可以依靠Cheerio以文件顺序退货吗?
- 7. AppEngine + django:依靠两者都可靠吗?
- 8. 我可以依靠iOS设备时钟正确吗?
- 9. 我可以依靠volumeClaimTemplates命名约定吗?
- 10. 我可以依靠sql视图中的字段顺序吗?
- 11. 我可以依靠ctl00_PagePlaceHolder_myId保持不变吗?
- 12. 我可以依靠CDN永久存储照片吗?
- 13. 我可以依靠“共享主机上的SSL”吗?
- 14. 我可以依靠SDL_Surface :: pitch来保持常量吗?
- 15. 我可以依靠ETags进行缓存控制吗
- 16. PayPal Express Checkout:我可以依靠PAYMENTREQUEST_0_ADDRESSSTATUS值吗?
- 17. 我可以依靠using语句来关闭我的MySQL连接吗?
- 18. 我应该依靠脏检查吗?
- 19. 我可以可靠地依靠具有相同名称的GET变量的顺序吗?
- 20. 可以参考依靠关闭Python中的文件吗?
- 21. 可以依靠自动传递引用来改变对象吗?
- 22. 可以依靠很多第三方软件包吗?
- 23. 依靠__del __()进行python清理不可靠吗?
- 24. 你可以依靠socket.id作为UID
- 25. 什么是webfont,我可以依靠他们
- 26. 初次握手后,我可以安全地依靠WebSocket连接吗?
- 27. 我可以依靠在传入python之前进行评估的参数吗?
- 28. 我可以依靠按注册顺序调用的事件处理程序吗?
- 29. 我可以依靠短路评估来检查C++中的向量边界吗?
- 30. 我可以依靠ISet.Add方法把新成员放在最后位置吗?
如果'sizeof()'仅在这些情况下返回位而不是字节将会非常不一致。 –
显然,只要'CHAR_BIT == 8',你就可以。现在,如果不是那样的话,找到一个架构并不容易。 – ach
'sizeof()'返回字节数,'uint32_t'指定以位为单位的宽度,所以基本上,目标平台上一个字节的位数是多少?请参阅'CHAR_BIT'。 – Niall