アカウント名:
パスワード:
板情報を配信するプログラムは本来、1銘柄当たり1280バイトの作業用メモリー領域を2万8000銘柄分、合計3万5000Kバイト確保するよう記述しなければならない。だが、1銘柄当たりのメモリー領域を誤って4バイトとしてしまったため、プログラムは本来の320分の1の109.375Kバイトしか確保しなかった。結果として89銘柄以上の板情報の問い合わせが同時に発生すると、作業用メモリーが足りなくなり、情報配信システムがダウンした。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
物事のやり方は一つではない -- Perlな人
ちょっと違う (スコア:4, 参考になる)
データ容量のサイズが28000銘柄分のはずが88銘柄分しか確保できてなかった。
http://itpro.nikkeibp.co.jp/article/NEWS/20080722/311271/
Re: (スコア:5, 参考になる)
Re: (スコア:1)
sizeof(DataType) のつもりが sizeof(DataType*) になってたとか?
…っていうのは、やっちゃったことあります。マクロ化してて、引数の型を間違えたりとか…
#define alloc(type,count) malloc(sizeof(type)*(count))
DataType *p = alloc(p, count);
ってな感じのコードだったかな。
Re:ちょっと違う (スコア:1, 参考になる)
そういう間違いを防ぐため、以下のようなマクロを使うことにしてます。
#define MALLOC1(p) ((p) = malloc(sizeof(*(p))))
#define MALLOCN(p,n) ((p) = malloc_array((n), sizeof(*(p))))
なお関数 malloc_array() 内では、整数オーバーフローのチェックが必要です。
親記事の alloc() マクロは、その点でも問題がありますね。