• ベストアンサー

malloc、new のメモリ確保について

mallocで確保できる最大メモリ領域と newで確保できる最大メモリ領域を知りたいです。 ご存知の方、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> malocで確保出来る最大メモリ領域は決まっていない > と言うことで宜しいのでしょうか。 決まっていないのではなく、知る方法がないのです。 実装によっては、決まっていない(そのときどきの状況による)場合もあると思います。 > new演算子で、charの配列のメモリ領域を確保しようとする場合 > > char * buff; > buff = new char[100000]; > > も同様に、確保できるメモリ領域は決まっていない のでしょうか? この場合、割付けに成功すれば、少なくとも100000バイトを確保できるだけです。実際にどれだけ確保したのか、あるいは同様の割付けをどれだけ行えるかを知る一般的な方法はありません。

ma_ma_ma
質問者

お礼

わかりやすいご回答を有難うございます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

malloc にしろ new にしろ, 確保できる量を知る「標準的な方法」はありません. もっとも確保できる量を知っても, 環境によっては意味がないこともあります. 極端な話, malloc/new で確保した「はず」だけどその他の理由で使えないこともあります.

ma_ma_ma
質問者

お礼

回答いただき有難うございます。 勉強中ですので、今後も宜しくお願い致します。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

前提条件がなさすぎで答えられません。 ・mallocに渡す引数の型(size_t)による制限 ・OSによる制限 ・コンパイラ(リンカ)によるデフォルトの設定による制限 ・シェルによる制限 などがありますから。 newに関しては、mallocと異なり直接確保するメモリの量を要求するわけではないので とりあえずパス。

ma_ma_ma
質問者

お礼

回答いただき、有難うございます。 勉強中ですので、今後も宜しくお願い致します。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

一般的には知るすべはありません。 特定の環境に特化した方法であったり、独自にライブラリを実装した場合には、知る方法があると思います。 ところで、newは必ずしもメモリ確保を行うためのものではありません。例えば、 void* operator new(std::size_t size, void* ptr) throw(); であれば、メモリ確保は行いませんので、確保できる最大メモリ領域は0です。 また、自作クラスでnew演算子を多重定義した場合には、最大確保量を取得するためのサービスを好きなように追加できるはずです。

ma_ma_ma
質問者

補足

malocで確保出来る最大メモリ領域は決まっていない と言うことで宜しいのでしょうか。 new演算子で、charの配列のメモリ領域を確保しようとする場合 char * buff; buff = new char[100000]; も同様に、確保できるメモリ領域は決まっていない のでしょうか?

関連するQ&A