gpt4 book ai didi

c - c中的堆分配

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

#include <stdio.h>
#include <malloc.h>
typedef struct Node {
int value; //4
struct Node* next; //4
}Node;
Node *create();
void add();
void del();
void search();

Node *create(int v) {
Node *first;
first = (Node *)(calloc(1,sizeof(*first)));
first->value = v;
first->next = NULL;
return first;
}
void add(Node **head,int v) {
Node *p;
p = (Node *)(calloc(1,sizeof(*p)));
p->value = v;
p->next = *head;
*head = p;

}
void search(Node *head) {
Node *p;
p=head;
while(p != NULL) {
printf("address is %d;value address is %d;next address is %d;next content is %d\n",p,&(p->value),&(p->next),p->next);
p = p->next;
}
}



int main() {
Node *head;
head = create(0);
add(&head,1);
add(&head,2);
add(&head,3);
search(head);
}

enter image description here

sizeof(Node) == 8,但为什么堆中每个节点的大小都是 16 字节?想(我的系统是 32 位的)。结构节点是 4bytes + 4bytes = 8bytes。

最佳答案

节点大小不是 16 字节,只是 malloc() 出于某种原因选择跳过 8 字节的内存,可能是为了自己的簿记。如果你想节省内存,少做大的分配,不要做很多小的,否则簿记开销会花费很多。

关于c - c中的堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980953/

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