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裏)方法。開發

相關文章
相關標籤/搜索