【发布时间】:2010-08-10 16:38:14
【问题描述】:
(sizeof) char 在 32 位 GCC 编译器中总是返回 1。
但是由于32位编译器的基本块大小是4,那么在基本大小为4字节的情况下,char如何占用一个字节???
考虑以下几点:
struct st
{
int a;
char c;
};
sizeof(st) 返回 8 与默认的 4 字节块大小一致(因为分配了 2 个块)
我永远无法理解为什么当分配一个大小为 4 的块时 sizeof(char) 返回为 1。
有人能解释一下吗???
我会非常感谢任何解释它的回复!!!
编辑:“位”的错字已更改为“字节”。我向第一次编辑的人问对不起。我回滚了 EDIT,因为我没有注意到 U 所做的更改。 感谢所有指出必须改变它的人,特别是@Mike Burton 否决了这个问题,感谢@jalf 似乎对我对概念的理解得出了结论!
【问题讨论】:
-
在编写可移植的 C 程序时,我学会了不要假设太多;甚至声明
the basic block size in 32 bit compiler is 4 bytes也是一个可能不正确的假设,因为数据大小和地址大小不需要相同。 “基本块大小”取决于系统的内存访问架构,不必与数据寄存器大小相对应。顺便说一句,这不会影响您关于 C 结构大小的基本问题。 -
我猜你的意思是字节,而不是位?
-
@James,我不认为这是重复的。另一个问题假设不知道填充或对齐。这个问题是关于为什么 sizeof 在某些情况下显然返回填充值,而不是其他情况。
-
@Shyam,在您的问题中,应该是:“但是由于 32 位编译器中的基本块大小是 4 个字节,那么当基本大小为 4 个字节时,char 如何占用单个字节?? ?", and, "sizeof(st) 返回 8 与默认块大小 4 字节一致(因为分配了 2 个块)" 一个字节中有 8 位,32 位中有 4 个字节。
-
@jalf - 你似乎误解了这个网站的性质。您认为编辑和社区编辑功能究竟有什么用?它不是为了好看。如果英语不好的人回滚了语言清理编辑,那也是错误的。对于大多数访问它的人来说,这个问题的含义是显而易见的。在第一次编辑后对 OP 来说应该是显而易见的。无需评论。