malloc小記_1
用malloc獲取空的內(nèi)存的地址,(malloc不會真正占用內(nèi)存,真正占用內(nèi)存的是初始化數(shù)據(jù)。)再進行數(shù)據(jù)填充,即占用內(nèi)存,運行了下,發(fā)覺當內(nèi)存用完的時候得出的占用內(nèi)存大小不一樣,明明占了將近1.5個GB,可是就是顯示占了90多MB,而且兩次pause都沒出現(xiàn)就結(jié)束了,暫時想不通,如果哪位GGJJ知道的話請回復,小弟謝過了。(在taskmgr.exe中觀察,呵呵,總算把2GB的內(nèi)存都用了,直至彈出“虛擬內(nèi)存不足的對話框”。)
以下為源代碼:
#include <stdio.h>

void occupy(void *);


int main()
{
unsigned long ram = 0, ramDelta = 0, ramMb = 0, ramShow = 0;
ramDelta = sizeof(char);
printf("sizeof(men): %d Byte\n", ramDelta);
void *pvoid = 0;

for (pvoid = malloc(ramDelta);pvoid;pvoid = malloc(ramDelta))
{
occupy(pvoid);
ram += ramDelta;
ramMb = (ram / 1024) / 1024;

if (ramShow != ramMb)
{
ramShow = ramMb;
printf("%d MB 被占用!\n", ramShow);
}
}
system("pause");
free(pvoid);
system("pause");
return 0;
}


void occupy(void *pram)
{
*(char *)pram = 1.0;
}
在gcc 3.4.5中編譯通過并在xp sp 2 上運行。
以下為源代碼:
#include <stdio.h>
void occupy(void *);

int main()
{
unsigned long ram = 0, ramDelta = 0, ramMb = 0, ramShow = 0;
ramDelta = sizeof(char);
printf("sizeof(men): %d Byte\n", ramDelta);
void *pvoid = 0;
for (pvoid = malloc(ramDelta);pvoid;pvoid = malloc(ramDelta))
{
occupy(pvoid);
ram += ramDelta;
ramMb = (ram / 1024) / 1024;
if (ramShow != ramMb)
{
ramShow = ramMb;
printf("%d MB 被占用!\n", ramShow);
}
}
system("pause");
free(pvoid);
system("pause");
return 0;
}

void occupy(void *pram)
{
*(char *)pram = 1.0;
}
在gcc 3.4.5中編譯通過并在xp sp 2 上運行。
posted on 2008-03-27 16:35 yanvenhom 閱讀(576) 評論(2) 編輯 收藏 引用 所屬分類: C/C++

