有几个内存分配函数可以用来管理动态内存,虽然具体可用的函数取决于系统,但大部分系统的stdlib.h头文件中都有如下函数:
malloc
realloc
calloc
free
表2-1总结了这些函数。
表2-1:动态内存分配函数
函数 | 描述 |
---|---|
malloc |
从堆上分配内存 |
realloc |
在之前分配的内存块的基础上,将内存重新分配为更大或者更小的部分 |
calloc |
从堆上分配内存并清零 |
free |
将内存块返回堆 |
动态内存从堆上分配,至于一连串内存分配调用,系统不保证内存的顺序和所分配内存的连续性。不过,分配的内存会根据指针的数据类型对齐,比如说,4字节的整数会分配在能被4整除的地址边界上。堆管理器返回的地址是最低字节的地址。
如下图所示,malloc
函数在地址500处分配了4字节空间,第二次使用该函数在地址600处分配了内存。它们都处于4字节地址边界上,而且不是从相邻的内存位置上分配的。
评论前必须登录!
注册