音声可逆変換ソフト総合スレ

■ このスレッドは過去ログ倉庫に格納されています
2008/08/26(火) 01:50:03ID:S1f4gspJ0
です
3935
垢版 |
2008/10/02(木) 14:50:01ID: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 プラグインなら別なのかな?
2008/10/02(木) 17:16:12ID: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というのもこれ。
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面