Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么sizeof为一个字符显示4个字节?_C++ - Fatal编程技术网

C++ 为什么sizeof为一个字符显示4个字节?

C++ 为什么sizeof为一个字符显示4个字节?,c++,C++,所以我现在是一名学生,正在学习编程课程 今天我们讨论了sizeof在不同类中的使用(如果它有1个int或2个int等等) 我发现这个例子有一部分很奇怪: class TwoIntAndACharClass { public: int x_; int y_; char z_; }; 以及测试它的部分 TwoIntAndACharClass o3b; cout << "Sizeof TwoIntAndACharClass = " <<

所以我现在是一名学生,正在学习编程课程

今天我们讨论了sizeof在不同类中的使用(如果它有1个int或2个int等等)

我发现这个例子有一部分很奇怪:

class TwoIntAndACharClass
{
public:
    int x_;
    int y_;
    char z_;
};
以及测试它的部分

TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass          = " <<  sizeof(o3b) << "\n";
TwoIntandacharO3B级;

cout
sizeof
提供结构的大小,而不是其成员大小的总和。由于对齐要求(
int
s通常喜欢在自然边界上对齐;在大多数平台上为4字节),编译器会将结构填充到12字节,以便当结构的多个实例彼此相邻(例如在数组中)时,它们保持正确对齐


大多数编译器都有一些自定义扩展来控制填充,例如Microsoft编译器中的
#pragma pack

两个词:舍入错误。当然,不完全是“错误”,但结构大小以各种方式(以及结构中的字段重新验证)向上舍入,以适合编译器、操作系统和CPU。您可以声明一个结构“packed”来防止这种情况发生,尽管存在可怕的“未定义行为”的危险。如果您没有在
char
上尝试使用
sizeof
,为什么要问“sizeof为一个char显示4个字节”?你没想到那可能是个有用的实验吗尝试将另一个字符添加到结构的末尾。在类的大小改变之前,您可以这样做多少次?