我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么人们会想要使用它.
我查看了MSDN页面,它提供了一些见解,但我希望能从有经验的人那里听到更多.我以前在代码中看过它,虽然我似乎无法找到它的位置.
考虑:
struct mystruct_A
{
char a;
int b;
char c;
} x;
struct mystruct_B
{
int b;
char a;
} y;
Run Code Online (Sandbox Code Playgroud)
结构的尺寸分别为12和8.
这些结构是填充还是包装?
什么时候进行填充或包装?
我正在使用32位机器,所以我认为内存对齐应该是4个字节.说我有结构:
typedef struct {
unsigned short v1;
unsigned short v2;
unsigned short v3;
} myStruct;
Run Code Online (Sandbox Code Playgroud)
实际大小是6个字节,我想对齐大小应该是8,但sizeof(myStruct)返回6.
但是,如果我写:
typedef struct {
unsigned short v1;
unsigned short v2;
unsigned short v3;
int i;
} myStruct;
Run Code Online (Sandbox Code Playgroud)
实际大小是10个字节,对齐是12,这次sizeof(myStruct) == 12.
有人可以解释一下有什么区别吗?
如果我有一个structC++,有没有办法安全地读/写一个跨平台/编译器兼容的文件?
因为如果我理解正确,每个编译器"填充"基于目标平台不同.
简介:编译期间编译器如何静态地确定C++类的大小?
细节:
我试图了解规则用于确定类将使用多少内存,以及内存如何对齐.
例如,以下代码声明了4个类.前2个是16个字节.但是3是48个字节,即使它包含与前2个相同的数据成员.而第四个类具有与第三个相同的数据成员,只是以不同的顺序,但它是32个字节.
#include <xmmintrin.h>
#include <stdio.h>
class TestClass1 {
__m128i vect;
};
class TestClass2 {
char buf[8];
char buf2[8];
};
class TestClass3 {
char buf[8];
__m128i vect;
char buf2[8];
};
class TestClass4 {
char buf[8];
char buf2[8];
__m128i vect;
};
TestClass1 *ptr1;
TestClass2 *ptr2;
TestClass3 *ptr3;
TestClass4 *ptr4;
int main() {
ptr1 = new TestClass1();
ptr2 = new TestClass2();
ptr3 = new TestClass3();
ptr4 = new TestClass4();
printf("sizeof TestClass1 is: %lu\t TestClass2 is: %lu\t TestClass3 is: …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include<stdio.h>
int main()
{
printf("The 'int' datatype is \t\t %lu bytes\n", sizeof(int));
printf("The 'unsigned int' data type is\t %lu bytes\n", sizeof(unsigned int));
printf("The 'short int' data type is\t %lu bytes\n", sizeof(short int));
printf("The 'long int' data type is\t %lu bytes\n", sizeof(long int));
printf("The 'long long int' data type is %lu bytes\n", sizeof(long long int));
printf("The 'float' data type is\t %lu bytes\n", sizeof(float));
printf("The 'char' data type is\t\t %lu bytes\n", sizeof(char));
}
Run Code Online (Sandbox Code Playgroud)
哪些输出:
The 'int' datatype is 4 bytes
The …Run Code Online (Sandbox Code Playgroud)