为什么此结构的大小不正确
why the size of this struct is not correct
我有这个示例代码,我用pack对其进行了修饰,以确保其大小为5字节(4表示int,1表示char)。
但打印出来的结构体大小是8字节。
#pragma pack push
#pragma pack 1
struct mystruct
{
int x;
char y;
};
#pragma pack pop
//static_assert(sizeof(mystruct) == 5, "Size of mystruct should be 5 byte.");
int _tmain(int argc, _TCHAR* argv[])
{
int x=sizeof(mystruct);
printf("size of struct is %dn",x);
return 0;
}
为什么te-pck不起作用?
如何确保结构的大小始终为5。
您的pragma语法错误。
试试这个:
#pragma pack(push,1)
...
#pragma pack(pop)
演示。
我认为编译器可以忽略pack
杂注;也许它可以用编译器开关重写。
编译器总是可以忽略您停止打包的尝试。从某些方面来说,这是一件好事,因为包装可以提高效率。。。想象一个数组,当你访问元素1时,它会被有效地遍历到,因为元素之间的距离(就内存而言)是一致的。这也通过结构来执行,以确保保持效率。
我指引你到这个堆栈溢出在不使用杂注的情况下禁用C中的结构填充
奇怪-我在一个第三方程序中有一些结构,它们被封装在1字节的边界上,并且可以按预期工作(尽管不受欢迎!)。
如果编译器忽略了您的杂注,请尝试将对齐编译器选项-C/C++|代码生成|结构成员对齐设置为1。
如果编译器正在进行"我最了解"的优化,也许把char放在第一位会停止它。
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- ctypes - 结构包含垃圾/不正确的数据
- 结构C++ – 从文件中读取不正确
- 使用位域的结构大小不正确
- 在C++中传递结构数组 - 被调用函数中不存在结构元素,如何正确传递向量?
- 为什么结构大小不正确
- 树结构 - 孩子不正确
- 报告描述符和报告数据结构不正确
- 错误:隐式删除,因为默认定义格式不正确(结构向量)
- 尝试push_back()结构会导致2D向量中的信息不正确
- 使用结构数组分配不正确的内存
- OpenCL结构值对CPU正确,但对GPU不正确
- 为什么此结构的大小不正确