gpt4 book ai didi

c - 64 位系统差异上的数据填充

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:19 24 4
gpt4 key购买 nike

这个程序创建并测量了一个带有指针(8 字节)和 3 个整数(每个 4 字节)的结构,并显示有 4 字节的数据填充。

我不明白为什么有 4 个字节的数据填充,要么 CPU 一次处理 8 个字节,应该有另外 8 个字节的填充,要么一次处理 4 个字节,应该没有对吧?

或者它是否将 2 个 4 字节的值放在内存的 8 字节部分中,让 CPU 在运行时将其拆分? (这可以解释差异,但对我来说似乎有点低效)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct test {
char *name;
int age;
int height;
int weight;
};

struct test *create(char *name, int age, int height, int weight)
{
struct test *thing = malloc(sizeof(struct test));

thing->name = strdup(name);
thing->age = age;
thing->height = height;
thing->weight = weight;

return thing;
}

void destroy(struct test *thing)
{
free(thing->name);
free(thing);
}


int main(int argc, char *argv[])
{
struct test * t1 = create("bleh",1,2,3);

printf("Sizeof struct: %lu\n",sizeof(struct test));
printf("Sizeof pointer (On 64bit system): %lu\n",sizeof(char *));
printf("Sizeof int: %lu\n",sizeof(int));

destroy(t1);

return 0;
}

输出:

Sizeof struct: 24
Sizeof pointer (On 64bit system): 8
Sizeof int: 4

最佳答案

出于对齐的原因,整个结构可能在末尾被填充。这是必需的,因为您可能希望拥有此结构的数组。

您提到的填充使结构始终以可被 8 整除的地址结束。

关于c - 64 位系统差异上的数据填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12583555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com