朝花夕拾 · C语言 | 内存篇
·
一.malloc
void *malloc(size_t size);
功能:向堆区申请空间
参数:
size:申请的空间字节数返回值:
成功:返回申请到的空间首地址
失败:NULL
void free (void * ptr)
功能:释放申请的堆区空间
参数:
ptr:申请到的堆区的空间首地址void calloc( size_ t nmemb, size_ t size)
功能:向堆区申请数组空间,并清空成0(与malloc的主要区别)
参数:
nmemb :申请的数组的元素个数
size:数组中的每个元素占的字节数返回值:
成功:返回申请到的空间首地址失败:NULL
堆区空间:
- 在函数中开辟的空间,希望随着函数结束,该空间仍然存在,可以在堆上开辟。
- 当需要的空间比较大时,可以去堆上开辟(栈空间相比太小,默认8MB,而堆空间取决于你的物理内存和虚拟内存)
堆和栈的区别:
栈区:
1.栈区用来保存局部变量,函数的形参返回值及函数调用的保护线程;
2.栈区由操作系统自动管理;
3.栈区默认大小8M,比堆区空间小;
4.栈的访问效率比堆的访问效率高。
5.随函数而生,随函数而死。函数执行完毕,栈上的变量立刻销毁。
堆区:
1.程序员手动管理。必须主动调用 malloc、calloc 去申请,用完后必须调用 free 去释放。如果忘了 free,这块内存直到程序结束才会被操作系统回收(内存泄漏)。

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)