3
好的。所以我對如何在內存中放置可執行文件的理解是......將代表應用程序可訪問的內存的方形框圖像化。爲什麼堆棧溢出?
程序代碼位於存儲器的底部,疊層被分配給點剛好超出程序代碼且向上分配的。堆在內存的頂部開始並向下分配。
如果是這樣的話,爲什麼它可能比堆棧存儲器分配更多的堆內存?
好的。所以我對如何在內存中放置可執行文件的理解是......將代表應用程序可訪問的內存的方形框圖像化。爲什麼堆棧溢出?
程序代碼位於存儲器的底部,疊層被分配給點剛好超出程序代碼且向上分配的。堆在內存的頂部開始並向下分配。
如果是這樣的話,爲什麼它可能比堆棧存儲器分配更多的堆內存?
因爲即使是在有大量虛擬內存的可用現代系統,調用堆棧的最大尺寸通常刻意侷限於說,1MB。
這通常不是一個基本的限制它可以修改這個(例如使用setrlimit()
在Linux中,或-Xss
flag的Java)。但需要這樣做通常表示一個異常的程序;如果你有大的數據集,它們通常應該存儲在堆中。