2012-10-10 171 views
0

我在win7上工作,需要使用malloc分配2個緩衝區,每個660M字節 第一次分配OK,secon緩衝區分配失敗。 我會對磁盤 670G免費MEM什麼是最大的malloc大小?有什麼能爲上述問題的原因最大malloc大小

+4

你的問題可能是內存碎片,沒有足夠大的單個連續塊來滿足660MB。 –

+2

另一種可能性是你實際上已經用完了內存。在PC上不太可能,但確實存在少於1.2GB的系統。也許你正在使用其中之一。 –

+0

如果您的應用程序是32位,那麼每個進程的最大限制爲2GB。我非常確定顯卡的內存可以吃到這個,所以你實際分配的數量可能會少一些。 –

回答

1

最大有效malloc()尺寸是適合進程堆的狀態。堆可以被分割(例如,有600M空閒內存塊的堆,然後20M使用塊,然後再次600MB空閒塊 - 儘管有1.2GB的空閒內存,但你無法獲得650M)。此外,加載DLL的AFAIK,Windows機制將每個庫綁定到某個地址,所以內存可能已經被DLL分割了。

1

你告訴你有670G空閒內存,但這是硬盤空間。

正在運行的程序需要內存RAM並且可能您的RAM內存低於您所需的內存。因此,您使用malloc獲取錯誤分配內存。