- ベストアンサー
malloc、new のメモリ確保について
mallocで確保できる最大メモリ領域と newで確保できる最大メモリ領域を知りたいです。 ご存知の方、教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> malocで確保出来る最大メモリ領域は決まっていない > と言うことで宜しいのでしょうか。 決まっていないのではなく、知る方法がないのです。 実装によっては、決まっていない(そのときどきの状況による)場合もあると思います。 > new演算子で、charの配列のメモリ領域を確保しようとする場合 > > char * buff; > buff = new char[100000]; > > も同様に、確保できるメモリ領域は決まっていない のでしょうか? この場合、割付けに成功すれば、少なくとも100000バイトを確保できるだけです。実際にどれだけ確保したのか、あるいは同様の割付けをどれだけ行えるかを知る一般的な方法はありません。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
malloc にしろ new にしろ, 確保できる量を知る「標準的な方法」はありません. もっとも確保できる量を知っても, 環境によっては意味がないこともあります. 極端な話, malloc/new で確保した「はず」だけどその他の理由で使えないこともあります.
お礼
回答いただき有難うございます。 勉強中ですので、今後も宜しくお願い致します。
- sakusaker7
- ベストアンサー率62% (800/1280)
前提条件がなさすぎで答えられません。 ・mallocに渡す引数の型(size_t)による制限 ・OSによる制限 ・コンパイラ(リンカ)によるデフォルトの設定による制限 ・シェルによる制限 などがありますから。 newに関しては、mallocと異なり直接確保するメモリの量を要求するわけではないので とりあえずパス。
お礼
回答いただき、有難うございます。 勉強中ですので、今後も宜しくお願い致します。
- jacta
- ベストアンサー率26% (845/3158)
一般的には知るすべはありません。 特定の環境に特化した方法であったり、独自にライブラリを実装した場合には、知る方法があると思います。 ところで、newは必ずしもメモリ確保を行うためのものではありません。例えば、 void* operator new(std::size_t size, void* ptr) throw(); であれば、メモリ確保は行いませんので、確保できる最大メモリ領域は0です。 また、自作クラスでnew演算子を多重定義した場合には、最大確保量を取得するためのサービスを好きなように追加できるはずです。
補足
malocで確保出来る最大メモリ領域は決まっていない と言うことで宜しいのでしょうか。 new演算子で、charの配列のメモリ領域を確保しようとする場合 char * buff; buff = new char[100000]; も同様に、確保できるメモリ領域は決まっていない のでしょうか?
お礼
わかりやすいご回答を有難うございます。