我将通过这个link学习C.页面上有趣的部分:
联合的真正目的是通过为内存中的数据安排标准大小来防止内存碎片化。通过有一个标准的数据大小,我们可以保证当动态分配的内存被释放时留下的任何洞总是可以被同一类型联合的另一个实例重用。
我通过以下代码理解这一部分:
typedef struct{
char name[100];
int age;
int rollno;
}student;
typedef union{
student *studentPtr;
char *text;
}typeUnion;
int
main(int argc, char **argv)
{
typeUnion union1;
//use union1.studentPtr
union1.text="Welcome to StackOverflow";
//use union1.text
return 0;
}
好吧,在上面的代码中,
union1.text
正在重用先前由union1.studentPtr
使用的空间,虽然不是完全使用,但仍在使用。现在,我不明白的是,
malloc
的空闲空间什么时候不能使用,这会导致内存碎片?编辑:浏览评论和答案,必须使用the classic text,将此编辑添加到文章中,假设它将帮助像我这样的初学者
最佳答案
这些评论在unions
方面有更多的专业知识。
关于你的问题,我的理解是:union
为联合变量中最大的数据类型预留内存。例如,在union中有一个short int
和一个long int
将为一个long int
留出足够的内存
假设您声明一个short int
变量而不是联合
但随后需要使用long int
。所以在free
上使用short int
然后使用malloc
为long int
分配内存。这一定是模糊的记忆。所以现在你的记忆是这样的。
在另一个使用的内存块中间有一个空闲字节。坐在那里等着你具体请求1字节的内存。
旁白:如果你正在学习c
我建议。它已经过时了,但我喜欢简洁、清晰和教科书式的方法。
关于c - union 如何防止内存碎片?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39307629/