[英]C++ Memory Management diffrences with Heap Allocation and Frame Allocation
[英]c++ memory management memory allocation on local variables
在下面的代碼中,我多次將整數數組分配給指針。 在每次調用中,指針的地址至少在運行時是相同的。 如果我不使用delete [] y
該進程將被殺死,而不會引發任何異常。 如果添加該行,該過程將永遠運行。
我的問題是,由於在兩種情況下(使用或不使用delete
),在函數調用之間指針的地址都保持不變,這是否意味着在內存中分配了相同的空間? 如果是,為什么在一種情況下停止該過程而在另一種情況下不停止呢?
在一個更籠統的問題中,函數返回時,用於局部變量的內存將如何處理? 常規變量和指針之間的內存管理策略是否不同?
#include<cstdio>
#include<iostream>
#include<exception>
#include<new>
using namespace std;
void foo();
int main()
{
while(true)
foo();
}
void foo()
{
try{
int *y=new int[1000];
printf("%X\n",&y);
// delete [] y;
}
catch(exception &exc){
cerr<< exc.what();
}
}
您正在打印指針變量的地址,而不是分配區域的地址。 嘗試此操作以查看分配區域的地址:
printf("%p\n", (void*)y);
如果delete
指針,則每個調用中的new
值都可能相同。 如果不delete
指針,則將永遠不會返回相同的指針,因為該函數必須分配新的內存,並且系統無法重用某些先前刪除的內存。
動態分配的內存會為剩余的過程分配,而在變量可以是本地的意義上,它不是“本地的”。 如果您沒有釋放內存(通過使用delete
),則內存泄漏。
函數返回時用於局部變量的內存將由下一個函數調用和該下一個函數的局部變量重用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.