2011-09-11 25 views
4

//ノードv0.5.6 //バッファサイズはnodejs

に私はnodejsはnodejsヒープの外側を割り当てることができる最大バッファサイズは、使用可能なシステムメモリの量によって制限されると仮定する。私は空きメモリのいくつかのギグを持っていると私はノードをクラッシュせずにその限界に近づくように見えることはできません。

FATAL ERROR:JSの割り当てが失敗しました - プロセスをメモリ

function bigArray(){ 
    // each ip could be 10 digits long, therefore, 
    // 10 * (bcast-cur) = size of Buffer. 
    // does that also mean size in bytes? 
    var cur = 167772160; 
    var bcast = 184549375; 
    var addresses = new Buffer((bcast-cur)*10); 
    var offset = 0; 
    while (cur <= bcast){ 
    cur += 1; 
    addresses.writeUInt32LE(cur,offset); 
    offset+=10; 
    } 
    return addresses; 
}; 
var ba = bigArray(); 

の外に、このブロックのノードライブラリにBuffer.jsのライン235にクラッシュ:

if (this.length > Buffer.poolSize) { 
    // Big buffer, just alloc one. 
    this.parent = new SlowBuffer(this.length); //crash here 
    this.offset = 0; 

答えて

7

エラーメッセージあなたは残念ながら少し誤解を招いていますが、バッファオーバーフローエラーが発生しています。

あなたのループはCUR == BCASTまで実行されますので、非常に最後のwriteUInt32LEは、バッファの長さは、過去数を書き込みます。ループの比較を「cur < bcast」に変更します。

+0

wow。私は一日を過ごしました。 <=は以前のリファクタリングから残っていました。私はそれが<と思っていて、それを見ていませんでした。 ugh。 –

+0

それも私には分かりませんでした。あなたのインデックスは紛らわしいものです。 – loganfsmyth

関連する問題