• 1.3、栈式存储分配

    在编译时期,过程/函数以及嵌套程序块的活动记录大小(最大值)是可以确定
    的。这个时候才使用栈式存储分配。因为栈的最大容量固定(windows 中为 2M,
    有些是 1M),若所需内存大于栈的剩余内存,则溢出。

    
    #include<stdio.h>//计算两个数的加法 
    int sum(int a,int b){
        int c;
        c =a+b;
        returna+b;}
    int main(void){
    int a;
    int b;
    int c;
    c =sum(a,b);
    //打印计算结果
    printf("%d+%d = %d",a,b,c);
    return1;
    }
    

    1.4·、堆式存储分配

    从栈式存储中,我们知道,每次函数执行完毕后,都会将当前栈顶活动记录弹出,
    这意味着变量随着函数执行的结束而丢失。但是有时候我们想要函数结束完之后,
    当前数据对象长期存在,这时候就该灵活但昂贵的堆发挥作用了。
    在堆式存储分配时,程序可以在任意时刻,以任意次序从程序的代码区的堆区申
    请和释放一个数据对象。通常情况下,堆的分配和释放是由程序向操作系统提出
    的,这也注定了它的分配效率没有栈那么快。
    两种方式
    堆式存储空间的分配和释放可以是显式的,也可以是隐式的。
    (1)显式的是指由程序员来负责应用程序的(堆)存储空间管理,可借助编译
    器和运行时系统所提供的默认存储管理机制。
    (2)隐式的是指(堆)存储空间的分配或释放不需要程序员负责,而是由编译
    器和运行时系统自动完成。
    某些语言有显式的存储空间分配和释放命令,如 Pascal 中的 new/deposit,C++
    中的 new/delete。在 C 语言中没有显式的存储空间分配和释放语句,但程序员
    可以使用标准库中的函数 malloc()和 free()来实现显式的分配和释放。

    上一篇:
    NDK相关(3)
    下一篇:
    NDK相关(1)
    本文目录
    本文目录