- 1 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/08/26(火) 01:50:03 ID:S1f4gspJ0]
- です
- 39 名前:35 mailto:sage [2008/10/02(木) 14:50:01 ID:IqmyHboz0]
- >>36-37
ソースは見ていないが、コマンドラインプログラムの方は、 標準 C 関数のみで書かれているだろうから、 そっちの方のファイル入出力関数の制限で 2G までかと。 標準 C 関数は、ものすごく古い時代に作成されたものだから、 ファイルサイズとかは int 型 が使われていて、 32bit OS なら 32bitのサイズ。32bit 符号付きだと、 最大値がちょうど2Gになる。(厳密には 2G -1) 64bit OS でコンパイルすれば、int 型は 64bit になるはずなので、 2GB を超えるサイズを扱えるようになる。 最近では、32 bit OS 用でも、64bit int への拡張版の C 関数互換のファイル入出力が用意されている場合が多いが、 環境ごと(コンパイラごと)に、実装内容が違うため、 こういうクロスプラットフォームなプロジェクトでは使用されない場合が多い。 しかし、foobar で2G 越え扱えないのはすごく意外だなぁ。 もしかして、flac は、CLI encoder だったりするのかしら? built-in プラグインなら別なのかな?
- 40 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/10/02(木) 17:16:12 ID:CJRFS13e0]
- >標準 C 関数は、ものすごく古い時代に作成されたものだから、
>ファイルサイズとかは int 型 が使われていて、 処理系依存だよ。例えばLinuxはデフォルトだとoff_tはint32だが、 コンパイル時に_FILE_OFFSET_BITSマクロを64に定義するとint64になる。 OSXではデフォルトでoff_tがint64。 このあたりの違いはconfigureがよきにはからってくれる。 off_tがint64な処理系なら、基本的にstdioのfread/fwrite/fseekoだけで 問題なく2GB制限を突破できる。FLACのlarge file supportというのもこれ。
|

|