個人對於堆疊的理解(簡單通俗)
阿新 • • 發佈:2019-01-22
最近在做安裝包(Inno Setup),也沒好好看C++,然後安裝包出了點小問題,說是堆溢位,自己也沒理解透堆疊這個概念,在這裡我就簡單的總結一下。
1.堆
在C++ 中,只有程式設計師自己分配的記憶體才會儲存到堆中,比如int *b = (int *)malloc(sizeof(int)*1) 這就算自己手動分配的一個,然後它就儲存在堆中,當你兩次呼叫的時候會發現,即使你不手動釋放記憶體,它的記憶體地址也會改變,所以造成的就是你越不釋放,然後不停的new記憶體就會越來越少,直到沒有。
2.棧
當然,在棧中剛好相反,比如int i = 0; 好,這個系統就自動分配到棧中,它會有一個記憶體地址,比如0X00b121c0,如果你不釋放,再重新呼叫的話,它的記憶體地址還是不會變的,即使你把裡面的內容拷貝替換了,下次還會給你分配這個地址,內容就是你替換的內容
說的....我都想抽自己了,舉例說下,就是說:
int main()
{
test();//第一次呼叫會發現copy的遠遠超出了i,然後再看地址會發現,紅色不坎入目
test();
}
void test()
{
int i;
int j;
char temp[] = "asdjklwqid";
strcopy(i, temp);
return 0;
}