2011-07-02 63 views
0

我目前在我的程序中遇到了一些問題。當我通過互聯網尋找解決方案時,我遇到了MSDN的一個頁面,它描述了一些堆分配的連接器選項,我不明白。Visual C++/HEAP鏈接器選項

The documentation says that you can set the Heapsize with /HEAP

我一直都知道棧的大小是固定的,這對我來說很合理。但我一直認爲堆的大小是可變的。爲了增加一些混淆,我發現默認值是1MB。我寫了大量使用超過1 MB內存的程序。

然後/ HEAP選項到底做了什麼?

感謝

+0

在我們深入調查深入的內幕並質疑智能編譯器的合理默認值之前,您是否介意告訴我們「有些麻煩」是什麼? –

+0

以下是關於我的堆問題的問題:http://goo.gl/KYMRj 但是我想了解它是如何工作的,以便我可以在將來避免類似的問題。 – Compuholic

+0

因爲你只是使用一個外部函數調用來完成各種惡意函數,所以不可能告訴它來自哪裏。如果可以,發佈一個完整的,最小的,自包含的示例,以便我們可以專注於可管理的事情。 –

回答

1

windows給予.exes(進程)內存,讓他們讀/寫訪問內存頁。對於C++程序員來說,它應該留給操作系統,千萬不要與

/HEAP 1,000,000意味着一個.exe文件以1,000,000字節的頁面開始......開始。改變這個值不應該影響任何東西。 Windows會自動在內存中分頁。這只是提示Windows爲這個進程提供性能所需的內存。

1

我想你混淆了這是由PE頭控制的OS堆(HeapAlloc功能),進而通過此鏈接器選項設置,和你的C++運行時庫動態分配(mallocnew),這可能使用VirtualAlloc直接從操作系統中獲取內存,並且不要使用操作系統堆。

有關OS堆參數的更多信息,請閱讀MSDN文檔CreateHeap

相關問題