[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep]Linuxスピーチサーバ(Re: [bep] [FAQ]coreを作らないには?)




中村 です。

In article <86ae46o5s3.fsf@windy.src.argv.org> 
Koichi INOUE <inoue@...> wrote:
> > 落ちる原因とは全く関係ないですが、ss_read_input() 内で
> > static char *buf に確保されたメモリってどこで free
> > しているのでしょうか?OS まかせ?
> 
> そうです。
> このバッファは実は必要だったらどんどん大きくなるので、ときどきは掃除をし
> ないといけないのでしょうね。
> 終了時はOSが勝手にfree()してくれることを期待している作りになっています。

なるほど。やっぱりそうだったのですね。
ですが、ssfunc.cpp の char *ss_read_input() はちょっと良く分かりません。

    if (pos == SS_INPUT_BLK_SIZE) {
      buf = (char *)realloc(buf,
				     SS_INPUT_BLK_SIZE * (++buf_blocks));
    }
は pos を SS_INPUT_BLK_SIZE と比較していて、
static char 宣言された buf_blocks がプラプラされています。

SS_INPUT_BLK_SIZE が 512 で buf_blocks が char だから
循環してうまくいくのでしょうか???