相关疑难解决方法(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万
查看次数

如果在int之后出现char,为什么要添加填充?

例如,有一种结构

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

在这种情况下,我们有[1字节] +填充[3字节] + int [4字节] = 8.

现在让我们对上面的struct进行一些更新,

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

在这种情况下,char来自int并且不需要添加填充字节,这意味着sizeof(A)= 5字节,但在这种情况下我也得到8字节的结果.为什么?

好的,这个案子呢

struct s
   {
       int b;
       double c;
       char a;
   };
Run Code Online (Sandbox Code Playgroud)

根据下面给出的逻辑,有一个:size = b[4 bytes] + padding[4 bytes] + c[8] + a[1] + padding[7 bytes to align with double] = 24,但执行后我得到16.这怎么可能?

c byte struct sizeof padding

7
推荐指数
1
解决办法
1982
查看次数

包含双字段的struct的大小

首先,我理解结构中的字节填充.但我仍然有一个小测试包含struct中的双字段,我不知道如何解释这个:

typedef struct {
    char a;
    double b;
}data;

typedef struct{
    char a;
    int b;
}single;

int main(){
    printf("%d\n",sizeof(double));
    printf("%d\n",sizeof(single));
    printf("%d\n",sizeof(data));
}
Run Code Online (Sandbox Code Playgroud)

通过这个测试,答案是:8 816.

为什么这个结果会让我思考?

通过第二次测试,我们可以看到我机器上的单词大小是4个字节.

通过第一次测试,我们可以看到double的大小是8个字节.

所以,在struct data:结果应该是12个字节:char为4个字节,double为8个字节.

但是,我不知道为什么结果是16个字节.(跟我这么奇怪)

请为我解释一下,谢谢:)

c struct sizeof

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

为什么结构中只有"char"类型的成员没有填充?

char在结构中只声明了类型成员.

#include <stdio.h>

struct st
{
    char c1;
    char c2;
    char c3;
    char c4;
    char c5;
};

int main() {
    struct st s;
    printf("%zu\n", sizeof(s));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出: [ 现场演示 ]

5
Run Code Online (Sandbox Code Playgroud)

那么,为什么结构中只有char类型成员没有填充?

c gcc structure padding char

-1
推荐指数
2
解决办法
538
查看次数

标签 统计

c ×4

padding ×3

sizeof ×2

struct ×2

structure ×2

byte ×1

char ×1

gcc ×1