为什么sizeof为一个字符显示4个字节
Why does sizeof show 4 bytes for a char?
所以我现在是一名学生,正在上编程课程。
今天我们讨论了sizeof在不同类中的使用(如果它有1 int或2 int,依此类推)
我觉得奇怪的一个例子是:
class TwoIntAndACharClass
{
public:
int x_;
int y_;
char z_;
};
以及测试它的部分
TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass = " << sizeof(o3b) << "n";
所以在程序中,我可以看到一个有1个字符的类占用了1个字节。所以当我看到这个时,我想我会看到9个字节,而不是12
所以一开始我觉得这很奇怪,但过了一段时间我得出结论,它可能会节省一些4字节的块。
为了100%确定这是真的,我尝试在类中添加一个新变量(8字节的双变量),总大小从12字节增加到现在的24字节。这个字符现在必须是8字节长,所以我的最后一个理论失败了。
我的最后一个理论是,它将使用已经声明的最大变量,并将其大小用于char变量_z,因为这适用于长整型(8字节)和双整型(也是8字节)
所以我的问题是,我的最后一个理论是真的吗?或者是不同的东西让字符占用了比所需更多的内存?
抱歉我英语不好。
sizeof
提供结构的大小,而不是其成员大小的总和。由于对齐要求(int
通常喜欢在自然边界上对齐;在大多数平台上是4字节),编译器会将结构填充到12字节,这样,当结构的多个实例彼此相邻时(例如,在数组中),它们会保持正确对齐。
大多数编译器都有一些自定义扩展来控制填充,例如Microsoft编译器中的#pragma pack
。
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何检查一个c++字符串中有多少相同的字符/数字
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用动态分配将 char* 复制到另一个字符**
- 将字符向量复制到另一个向量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- C++:使用另一个字符将一个字符大写
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- C ++读取用户输入的字符一个一个符号
- 遍历数组或从打开的文件中获取字符 - 一个比另一个有什么优势
- 将文本文件的内容一个字符一个字符地读入矢量,不跳过空白或新行
- 这是更快和更有效的,处理一个字符一个字符作为字符或流