一.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.程序员手动管理。必须主动调用 malloccalloc 去申请,用完后必须调用 free 去释放。如果忘了 free,这块内存直到程序结束才会被操作系统回收(内存泄漏)。

    Logo

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

    更多推荐