C 静态存储动态存储

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

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

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

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

eg:code

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

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

若是咱们此时使用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里)方法。开发

相关文章
相关标签/搜索