相关疑难解决方法(0)

填充C中的结构

这是一个面试问题.直到现在,我曾经认为这些问题纯粹依赖于编译器,不应该担心我,但现在,我对它很好奇.

假设您有两种结构:

struct A {  
  int* a;  
  char b;  
 }  
Run Code Online (Sandbox Code Playgroud)

而且,

struct B {  
  char a;  
  int* b;  
}  
Run Code Online (Sandbox Code Playgroud)

那么你更喜欢哪一个?为什么?我的回答是这样的(虽然我有点在黑暗中拍摄)第一个结构应该是首选的,因为编译器为字大小的一些倍数(这是指针的大小 - 在32上的4个字节)分配结构的空间位机和64位的8字节).因此,对于这两种结构,编译器将分配8个字节(假设它是32位机器).但是,在第一种情况下,填充将在所有变量之后(即在a和b之后)完成.因此,即使有一些机会,b得到一些溢出的值并破坏我的下一个填充字节,但我的a仍然是安全的.

他似乎并不高兴,并要求第一个结构在第二个结构上的一个缺点.我没有太多话要说.:d

请帮我解答.

c structure padding

40
推荐指数
2
解决办法
3万
查看次数

在不使用pragma的情况下禁用C中的结构填充

如何在不使用pragma的情况下禁用C中的结构填充?

c pragma

11
推荐指数
1
解决办法
6858
查看次数

标签 统计

c ×2

padding ×1

pragma ×1

structure ×1