我试图理解C中的结构的内存分配,但我坚持下去。
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight)
{
struct Person *who = malloc(sizeof(struct Person));
assert(who != NULL);
who->age = age;
who->height = height;
who->weight = weight;
who->name = strdup(name);
return who;
}
int main(int argc, char *argv[])
{
struct Person *joe = Person_create("ABC", 10, 170, 60);
printf("Size of joe: %d\n", sizeof(*joe));
printf("1. Address of joe \t= %x\n", joe);
printf("2. Address of Age \t= %x\n", &joe->age);
printf("3. Address of Height \t= %x\n", &joe->height);
printf("4. Address of Weight \t= %x\n", &joe->weight);
printf("5. Address of name \t= %x\n", joe->name);
...
我不明白的是这个结构的内存分配。在我的打印输出上,我看到了:
Size of joe: 24
1. Address of joe = 602010
2. Address of Age = 602018
3. Address of Height = 60201c
4. Address of Weight = 602020
5. Address of name = 602030
问题:
*name
的大小如何计算为名称仅指向
第一个炭?答案 0 :(得分:0)
这是由于称为数据对齐的东西。引用this website
C / C ++中的每种数据类型都有对齐要求(实际上它是由处理器架构强制要求,而不是语言要求)。
然后扩展结构的这个要求:
由于各种数据类型的对齐要求,结构的每个成员都应该自然对齐。
您可以查看this文章,详细阅读..
答案 1 :(得分:-2)
结构的内存布局取决于机器,因此除非您尝试实现DBMS或设备驱动程序或类似内容,否则不应该为此烦恼。
sizeof(*name)
等于sizeof(char)
,我不会在这里弄到你的困惑,你能给出进一步的解释吗?