編譯後,我遇到了Scilab中的內存分配問題。Scilab編譯「無法分配此數量的內存」
我在ppc64(POWER8)上的紅帽上編譯。堆棧限制已被設置爲無限制(ulimit -s unlimited
)。 ./configure
腳本(有幾個選項我沒有在這裏顯示)成功運行,但make all
失敗並停止。當它停了,還停留在Scilab的命令提示符下此消息:
./bin/scilab-cli -ns -noatomsautoload -f modules/functions/scripts/buildmacros/buildmacros.sce
stacksize(5000000);
!--error 10001
stacksize: Cannot allocate memory.
%s: Cannot allocate this quantity of memory.
at line 27 of exec file called by :
exec('modules/functions/scripts/buildmacros/buildmacros.sce',-1)
-->
我已經調查了一下,該錯誤消息似乎在行00027
在buildmatros.sce
叫,當然,這裏的功能stacksize(5000000)
是調用。
這個函數中定義:
scilab-5.5.1/modules/core/sci_gateway/c/sci_stacksize.c
我發現了一個版本的文件在這個頁面:http://doxygen.scilab.org/master_wg/d5/dfb/sci__stacksize_8c_source.html。 條件是假的,並觸發這個事件在我看來,在線路00295.
顯示了在這個文件中,你看到的是顯示的錯誤,每當作爲輸入的stacksize
是比什麼是該方法返回LARGER get_max_memory_for_scilab_stack()
從類:
scilab-5.5.1/modules/core/src/c/stackinfo.c
我再次下頁發現了一個版本的在線: http://doxygen.scilab.org/master_wg/dd/dfb/stackinfo_8h.html#afbd65a57df45bed9445a7393a4558395 該方法是從線109
聲明。
它似乎會調用一個名爲MAXLONG
的變量,但該變量從未明確聲明!如您所見,已多次聲明(行00019
,00035
,00043
,00050
),但所有行均已註釋! [校正:線路沒有評論,這是我的#是註釋符號的錯誤的認識,但它並不是]
所以我的猜測是:MAXLONG
未聲明的,所以功能不返回值(或返回0),因此錯誤消息被觸發,因爲輸入的stacksize
高於0或NULL
或N/A
。
我的問題是,那麼:
- 爲什麼都行作了評論MAXLONG定義?
- MAXLONG起源於哪裏?它是從內核傳遞的東西嗎?
- 我該如何解決問題?
謝謝!
PS - 我試圖取消註釋buildmacros
中的行,並且它沒有問題地編譯和安裝。但是,當我開始scilab-cli
時,它再次顯示相同的消息。經進一步調查後
編輯:
經過進一步調查,我發現了我認爲是的評論的確是編譯器指令......但我一直在我的這些錯誤,從而使回答我的問題是可以理解的。
這是我的新觀點。
在Scilab中,我注意到通過給出一個輸入堆棧大小超出界限,調用相同的方法get_max_memory_for_scilab_stack()
來獲得上限。我看到它的下界是默認定義的。
-->stacksize(1)
!--error 1504
stacksize: Out of bounds value. Not in [180000,268435454].
還用堆棧大小似乎罰款:
-->stacksize()
ans =
7999994. 332.
但是,試圖給這種值的輸入其間時,它失敗。
-->stacksize(1)
!--error 1504
stacksize: Out of bounds value. Not in [180000,268435454].
它定義在:'stackinfo.c line 00035 #define MAXLONG LONG_MAX',它應該是2 GB,所以max應該是2GB/8或256M。 – 2015-03-02 12:59:46