[英]c++ memory allocation procedure for pointers
在MSVC ++中,首先我創建了一個vil_image_view容器(im_1)並通過提供大小(行和列)分配了內存,然后我為該指針分配了一個NULL值,在這兩個步驟之后,我創建了另一個圖像容器(im_2)並執行了分配內存的過程相同,我注意到兩個容器的內存地址相同。 那是完全隨機的嗎? 或分配和釋放如何發生?
vil_image_view是vxl庫中的圖像容器,並且是共享指針,當參考計數器變為零時,該對象將被自動刪除
vil_image_view<float> im_1;
im_1.set_size(n,m); //0x05773ff0
im_1 = NULL; //0x00000000
vil_image_view<float> im_2;
im_2.set_size(n,m); //0x05773ff0
以下代碼返回由VC編譯並在Windows上運行的相同地址。
#include <iostream>
using namespace std;
int main()
{
int *i = new int[100];
std::cout << i << std::endl;
delete [] i;
int *j = new int[100];
std::cout << j << std::endl;
delete [] j;
return 0;
}
不同的系統可能具有不同的內存分配和釋放策略。 但是通常,記憶是通過鏈表維護的。 一塊空閑內存(帶有標題)將指向下一個空閑內存。 已經分配的將被跳過。 釋放內存后,可能需要與現有的空閑塊合並以形成更大的塊。
分配內存時,最簡單的策略是從列表頭搜索,然后找到第一個空閑塊,該空閑塊的大小大於所需大小。
以下代碼很可能不會返回相同的地址。
#include <iostream>
using namespace std;
int main()
{
int *i = new int[100];
std::cout << i << std::endl;
delete [] i;
int *j = new int[10000];
std::cout << j << std::endl;
delete [] j;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.