Ошибка загрузки DLL в Python из-за недостаточного размера стека? - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть код Python, который импортирует DLL, созданные с помощью f2py (из процедур Фортрана).Теперь программа python падает, если массивы в фортране слишком велики.Как мне справиться с этим?Увеличивая размер стека?Или куча?Я пытался изучить вопрос, но я все еще не понимаю, как я могу увеличить стек или я должен использовать кучу вместо этого и как я должен это сделать .. ???Python всегда вылетает в строке, где я пытаюсь импортировать dll, т.е. в строке "import f90_routine".Кто-то тоже упомянул темы, но я не знаю, как их использовать.Надеюсь, кто-нибудь может мне помочь !!

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Ваша основная проблема заключается в том, что вы храните большие массивы данных в стеке.Это плохой дизайн, и, вероятно, это связано с тем, как реализован код на Фортране.

Большие массивы необходимо хранить в куче и динамически размещать там.Чтобы решить эту проблему, вам нужно будет соответствующим образом понять и изменить свой код на Fortran.

Ключевое слово ALLOCATE - это способ создания распределенных данных кучи в Fortran 90. Однако у многих компиляторов есть опции для размещения массивов.в кучу, и это может быть самым подходящим маршрутом для вас прямо сейчас.

0 голосов
/ 11 апреля 2011

Существует утилита EDITBIN, поставляемая с Visual Studio (и, возможно, также 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 всем людям, которые хотят запустить ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...