zoukankan      html  css  js  c++  java
  • C 静态存储动态存储

    首先,我们可以把程序所占的内存空间分为三个部分:(可以根据静态资源区、栈区、堆区来划分)

    静态存储:程序运行期间由系统分配固定得到存储空间(栈);

    动态存储:开发者根据自身需要进行动态分配的存储空间(堆)。

    静态储存典型的就是我们函数内部的形参、局部变量,在函数得到生命周期结束之后,这些变量所占的内存也会被释放掉。

    eg:

    int* StackMemory()
    {
        int stackmemory;
        int* stackptr = nullptr;
        stackptr = &stackmemory;
        printf("ptr1=%d", stackptr);
        return stackptr;
    }

    StackMemory函数的调用结束后,StackMemory所占的内存也会相应的释放。

    如果我们此时使用StackMemory返回给我们的指针所指的地址是不安全的。

    void main() 
    {
        int* stackprt;
        stackprt = StackMemory();
        *stackprt = 100;
        printf("ptr2=%d", stackprt);
    }

    想要StackMemory返回的地址是安全的,这里就要用到动态分配存储空间,用一个新函数Dynamic。

    int* Dynamic()
    {
        //(int*)malloc(4);也可以
        int* dy = new int(10);
        printf("ptr1=%d", dy);
        return dy;
    }

    用new、malloc都可以创建动态存储。现在我们调用Dynamic返回的地址就是安全的了。

    void main() 
    {
        int* stackprt;
        stackprt = Dynamic();
        *stackprt = 100;
        printf("ptr2=%d", stackprt);
        free(stackprt);
    }

    注意:动态分配的存储需要我们手动来释放,不然会造成内存的泄露,释放内存调用free(它跟malloc都在malloc.h里)方法。

  • 相关阅读:
    JAVA 字符处理
    android:visibility 隐藏 可见 不可见
    Android中 int 和 String 互相转换的多种方法
    日期月和日补零
    【程序】程序报错 error:-1610149839 等大负数
    【IE】将IE11改为64位
    【linux】CentOS网络配置
    【linux】CentOS虚拟机eth0 提示Device does not seem to be present
    【SUSE】关闭防火墙
    【走马观花】十月八日通州雾
  • 原文地址:https://www.cnblogs.com/zebra-bin/p/11397633.html
Copyright © 2011-2022 走看看