相关疑难解决方法(0)

#pragma pack效果

我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么人们会想要使用它.

我查看了MSDN页面,它提供了一些见解,但我希望能从有经验的人那里听到更多.我以前在代码中看过它,虽然我似乎无法找到它的位置.

c c-preprocessor pragma-pack

212
推荐指数
4
解决办法
19万
查看次数

结构填料和包装

考虑:

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.

这些结构是填充还是包装?

什么时候进行填充或包装?

c struct structure packing padding

189
推荐指数
6
解决办法
25万
查看次数

C结构中的内存对齐

我正在使用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.

有人可以解释一下有什么区别吗?

c c++ memory-alignment structure-packing

53
推荐指数
5
解决办法
4万
查看次数

C++中的struct padding

如果我有一个structC++,有没有办法安全地读/写一个跨平台/编译器兼容的文件?

因为如果我理解正确,每个编译器"填充"基于目标平台不同.

c++ struct

51
推荐指数
3
解决办法
5万
查看次数

如何确定C++类的大小?

简介:编译期间编译器如何静态地确定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)

c++ memory-alignment

10
推荐指数
2
解决办法
1万
查看次数

C 中 sizeof() 返回值的正确格式说明符

我有以下代码:

#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)

c string types string-formatting

4
推荐指数
2
解决办法
5360
查看次数