假設10K堆如何分配動態內存並重新分配後,重新分配,我們如何把中間的空閒內存,以一個塊存儲
int *p1;
p1 = malloc(3*K);
然後,進一步4K要求:
p2 = malloc(4*K);
內存3K現在是免費的。
一段時間後,第一內存分配,指向P1,被解除分配:
free(p1);
這使得自由兩個3K塊內存6K。對於4K分配的另一個請求發出:
p1 = malloc(4*K);
這將導致失敗 - NULL返回到P1 - 因爲,即使內存6K是可用的,沒有提供一個4K連續塊
如何將兩個3K塊合併爲一個6K塊?
下面的代碼給出了分段錯誤。
如果我釋放2和第4排在釋放內存兩大塊瑪吉作爲一個塊怎麼可能
#include<stdio.h>
#include<stdlib.h>
int** allocate2D(int rows,int cols)
{
int **arr2D;
int i;
arr2D = (int**)malloc(rows*sizeof(int*));
for(i=0;i<rows;i++)
{
arr2D[i] = (int*)malloc(cols*sizeof(int));
}
}
void deallocate2D(int** arr2D,int rows)
{
int i,a,b;
printf("Enter from which row you want to delete");
scanf("%d",&a);
printf("Enter till which row you want to delete");
scanf("%d",&b);
for(i=a;i<b;i++)
{
free(arr2D[i]);
}
}
main()
{
int i,j,k;
int **arr2D;
arr2D=allocate2D(5,5);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%d" ,arr2D[i][j]);
}
}
deallocate2D(arr2D,k);
}
我曾見過這個問題(前幾天) 。答案是:你不能。 –
從應用程序的角度來看,您*無法「合併」塊,因爲您無法控制分配器。如果你想要這個功能,你必須創建你自己的分配器。 –
@Someprogrammerdude我們如何創建自己的內存分配器? – praneeth