我有一個python代碼,它導入了由f2py(來自fortran例程)創建的dll。如果fortran中的數組太大,現在python程序崩潰。我該如何管理?通過增加堆棧大小?還是堆?我試圖研究這個問題,但我仍然不明白我如何增加堆棧,或者我應該使用堆而不是我應該怎麼做。 Python總是在我嘗試導入dll的行上崩潰,即在「import f90_routine」行。有人還提到線程,但我不知道如何使用它們。希望可以有人幫幫我!!由於堆棧大小不足導致python的dll加載錯誤?
回答
在Visual Studio中有一個名爲EDITBIN的工具(也可能是Windows SDK),它正是您想要的。請參閱http://msdn.microsoft.com/en-us/library/xd3shwhf%28v=vs.71%29.aspx以供參考。
要檢查堆棧大小,使用
dumpbin /headers python.exe
並查找「堆棧儲備的大小」,「可選的標頭值」下。
editbin /stack:size_in_bytes python.exe
請注意,您將不得不將修改後的Python.exe分發給所有想要運行代碼的人。
修改後的Python exe聽起來是一個相當激烈的解決方案! – 2011-04-11 10:44:13
因爲pythonservice.exe(來自pywin32)使用比Python小的堆棧大小,並且我的程序在作爲Windows服務運行時崩潰,所以我不得不在客戶現場做類似的事情。當用Python中的堆棧溢出命中時,你並不總是有很多其他選項,上面的技巧對我來說是一種生命保護。請注意,最新版本的pywin32應該修復了這個問題。 – 2011-04-12 12:48:31
我認爲OP的問題實際上是堆棧分配的數組實際上太大而無法放置在堆棧上。 – 2011-04-12 12:53:59
您的基本問題是您正在堆棧上存儲大量數據。這是糟糕的設計,可能是由於Fortran代碼的實現方式。
大型數組需要存儲在堆上並在那裏動態分配。要解決這個問題,您需要相應地理解和修改Fortran代碼。
ALLOCATE
關鍵字是您如何在Fortran 90中創建堆分配的數據。但是,許多編譯器都可以選擇將數組分配到堆上,這可能是現在最適合您的路線。
- 1. Retrofit在堆棧大小錯誤中導致GET結果,1036 KB
- 2. 由於堆大小增加,在android中出現內存不足錯誤
- 3. 的JUnit Ant任務會導致「堆棧大小太小」的錯誤
- 4. 「堆棧空間不足」錯誤不一致
- 5. 由於添加函數導致的Java堆空間錯誤
- 6. 導致堆棧溢出d3d11.dll
- 7. 堆棧推送導致嚴重錯誤
- 8. 堆棧空間不足錯誤
- 9. Excel VBA「堆棧空間不足」錯誤
- 10. 堆棧空間不足錯誤
- 11. 由於For循環中的堆內存不足導致內存不足?
- 12. 即使增加堆大小後Tomcat7內存不足錯誤
- 13. 由於堆棧爲空而導致Parallel.Invoke中的DataBind()失敗。錯誤
- 14. SQL加載程序錯誤 - 由於數據錯誤導致行未加載
- 15. 由於數組大小而導致分割錯誤?
- 16. 堆棧溢出錯誤,由於大量的計算
- 17. 動態setTimeout導致「最大調用堆棧超出」錯誤
- 18. RequireJS 2.1.9使用Grunt導致「最大調用堆棧..」錯誤
- 19. 爲什麼這會導致最大調用堆棧錯誤?
- 20. 由於堆棧溢出導致GUI重啓時發生wxHaskell段錯誤
- 21. 增加堆棧大小c#
- 22. 增加AsyncTask堆棧大小?
- 23. 增加堆棧大小
- 24. 表單提交導致'超出最大調用堆棧大小'
- 25. 長輪詢導致最大調用堆棧大小超出
- 26. Java堆棧溢出錯誤 - 如何在Eclipse中增加堆棧大小?
- 27. Ubuntu上的Mono堆棧/堆損壞導致分段錯誤
- 28. 增加堆棧保留大小不會防止堆棧溢出
- 29. 如何在Java/Groovy的聲明堆棧大小(確認錯誤:堆棧太大)
- 30. 運行時錯誤運行堆棧,這可能是由於數組大小
你確定這是一個堆棧溢出問題嗎?是什麼讓你認爲它是? – 2011-04-11 07:03:42
請包括關於您正在使用的python版本,Fortran和C編譯器以及用於生成DLL的編譯標誌的信息。 – 2011-04-11 07:08:40