C语言内存管理总结
更新: 2018/01/09 增加free()
更新: 2018/04/13 修改部分文字与表格背景色与默认颜色相同
//# TODO: malloc, alloc, calloc, realloc 1F916BF4-7F64-4EAE-B9B1-7ECD00EFF5B2
备注: 晚点补上memset
C语言跟内存分配方式[1] | |
① | 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 |
② | 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 |
③ | 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多 |
总结 | alloc申请的是栈上的内存,无需手动释放。一般不用。 malloc, calloc, realloc申请的是堆上的内存, 释放完全要靠自己free void free(void *p); |
||||||||||||
alloc | 向栈申请内存,函数结束时候自动释放 无需free |
||||||||||||
malloc | void* malloc(unsigned
size); 如果调用成功,函数malloc()和calloc()都将返回所分配的内存空间的首地址。 malloc, calloc, realloc申请的是堆上的内存, 释放完全要靠自己free
|
||||||||||||
calloc | void* calloc(size_t numElements, size_t
sizeOfElement); 如果调用成功,函数malloc()和calloc()都将返回所分配的内存空间的首地址。
|
||||||||||||
realloc | void* realloc(void* ptr, unsigned
newsize);
|
||||||||||||
参考:
[1]《malloc()与 alloc()区别 (转)》,蔚蓝色的天空,
2010/03/22, http://www.cnblogs.com/longyi1234/archive/2010/03/22/malloc.html
[2]《malloc、calloc、realloc的区别》,
shuaishuai80, 2011/01/15, http://blog.csdn.net/shuaishuai80/article/details/6140979