(sizeof) char 在 32 位 GCC 编译器中总是返回 1。
但是由于32位编译器的基本 block 大小是4,那么在基本大小为4字节的情况下,char如何占用单个字节???
考虑以下几点:
struct st
{
int a;
char c;
};
sizeof(st) 返回 8 与默认的 4 字节 block 大小一致(因为分配了 2 个 block )
我永远无法理解为什么当分配一个大小为 4 的 block 时 sizeof(char) 返回为 1。
有人能解释一下吗???
我会非常感谢任何解释它的回复!!!
编辑:“位”的错字已更改为“字节”。我向第一次编辑的人问对不起。我回滚了 EDIT,因为我没有注意到 U 所做的更改。 感谢所有指出必须改变它的人,尤其是@Mike Burton 否决了这个问题,感谢@jalf 似乎对我对概念的理解得出了结论!
最佳答案
sizeof(char)
始终为 1。始终。您所说的“ block 大小”只是机器的 native 字大小 - 通常是导致最有效操作的大小。您的计算机仍然可以单独寻址每个字节 - 这就是 sizeof
运算符告诉您的内容。当您执行 sizeof(int)
时,它会返回 4 来告诉您 int
在您的机器上是 4 个字节。同样,您的结构是 8 个字节长。 sizeof
没有关于一个字节中有多少位的信息。
您的结构长度为 8 个字节而不是 5 个字节(如您所料)的原因是编译器正在向结构中添加 padding 以使所有内容都与该原生字长很好地对齐,再次提高效率。大多数编译器为您提供了pack 结构的选项,可以使用 #pragma
指令或其他编译器扩展,在这种情况下,您可以强制结构采用最小尺寸,无论您的机器的字长如何。
char
是大小 1,因为这是您的计算机可以处理的最小访问大小 - 对于大多数机器来说是 8 位值。 sizeof
运算符为您提供所有其他数量的大小,单位为与您询问的任何大小相同的 char
对象的数量。出于性能原因,编译器会将 填充(参见下面的链接)添加到您的数据结构中,因此在实践中它比您从结构定义中想象的要大。
维基百科上有一篇文章叫做 Data structure alignment里面有很好的解释和例子。
关于c++ - 了解 32 位 C 编译器中的 sizeof(char),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451266/