我有一個使用大量線程的應用程序。大多數這些線程是由我無法控制的第三方dll創建的。是否有可能更改默認線程堆棧大小爲不在您控制的dll C++ win32
爲了減少虛擬內存的使用量,我將可執行文件的默認堆棧大小設置爲0.5MiB(而不是默認的1MiB)。這減少了超過500 MiB的地址空間使用,這非常有用,因爲XP(不幸)具有2GiB的虛擬內存限制。
我最近不得不將另一個第三方dll集成到應用程序中,導致在此級別的堆棧溢出,因此我必須將默認堆棧大小設置爲1MiB。
DLL正在創建一個單獨的線程,它是導致問題的線程,所以我無法通過在使用CreateThread選項的應用程序中使用DLL的線程上指定線程大小來控制它。
所以我的問題是有反正拿到DLL有超過可執行內螺紋不同的默認堆棧大小,因爲我不能編輯該DLL
你究竟在努力解決什麼問題?如果內存不足,堆棧中未使用的部分應該無關緊要,因爲它是按「需求」分配的 - 即使不是由於某種原因,也應該可以交換出去,永遠不會再使用。 不知道哪個第三方庫,我會說你要求一個無法找到的解決方案。 – 2013-04-08 15:58:36
是的,我知道它是按需分配的,但它確實佔用了虛擬內存空間,這在XP上不幸(在XP上)會使應用程序停留在2GiB上。這是一個內存沉重的應用程序。我知道這可能是那些不幸的不可修復的問題之一,但值得問一下以防萬一。 – user2258296 2013-04-08 16:10:08
對於運行*千*線程的進程,您可以使用合理的東西並不是一件完整的事情。這是不合理的。指定一個64位操作系統,使用/ LARGEADDRESSAWARE進行鏈接,您將使VM大小加倍。然後去找另一份工作。 – 2013-04-08 17:16:03