2012-11-08 78 views
3

我使用MALLOCTYPE在AIX 6.1AIX進程內存使用malloc免費通話中環

while(true) 
{ 
    int a = rand(); //generate a random integer value 
    void* test = malloc(a*a); //allocate large chunk of memory block 
    usleep(3000000); //sleep for 3 sec 
    free(test); // release memory block 
} 

運行此代碼=桶 我的觀察是 駐留集大小(實際內存)和數據部分尺寸增加過程不斷增加。這是通過命令ps v PID 檢查pg sp值顯示在topas中的過程正在緩慢增加。

有人可以證明這種行爲。

+0

如果您在一段時間內沒有得到答案,請查看ittoolbox.com上的AIX區域。那裏有很多AIX專家。祝你好運。 – shellter

+0

什麼是您的平臺上的RAND_MAX?在我的系統上是2^31-1(非AIX,但是),這意味着'a * a'對於內存分配可能會非常大。無論如何,在我見過的大多數C庫實現中,只是'free()'內存塊通常不會縮小進程的虛擬內存大小,它只是將該塊返回給'malloc()''free()分配器。所以我希望你的堆永遠不會小於你迄今爲止所做的最大配額。 – twalberg

+0

int max在我的機器上是2^31-1。我有16 GB的RAM和500 MB的頁面空間。代碼中的內存分配請求範圍爲1 MB到1000 MB。數據段大小從400K增加。 – PankajM

回答

1

空閒時,內存不會釋放到AIX操作系統,但保留用於重用。使用MALLOCOPTIONS = disclaim,將釋放內存釋放回AIX操作系統,而不會增加內存利用率。但是在MALLOCOPTIONS = disclaim的情況下,CPU利用率幾乎高出2-3倍。