アプリ版:「スタンプのみでお礼する」機能のリリースについて

mallocで確保できる最大メモリ領域と
newで確保できる最大メモリ領域を知りたいです。

ご存知の方、教えて下さい。

A 回答 (4件)

> malocで確保出来る最大メモリ領域は決まっていない


> と言うことで宜しいのでしょうか。

決まっていないのではなく、知る方法がないのです。
実装によっては、決まっていない(そのときどきの状況による)場合もあると思います。

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

この場合、割付けに成功すれば、少なくとも100000バイトを確保できるだけです。実際にどれだけ確保したのか、あるいは同様の割付けをどれだけ行えるかを知る一般的な方法はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/07/31 17:32

malloc にしろ new にしろ, 確保できる量を知る「標準的な方法」はありません.


もっとも確保できる量を知っても, 環境によっては意味がないこともあります. 極端な話, malloc/new で確保した「はず」だけどその他の理由で使えないこともあります.
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/07/31 17:30

前提条件がなさすぎで答えられません。



・mallocに渡す引数の型(size_t)による制限
・OSによる制限
・コンパイラ(リンカ)によるデフォルトの設定による制限
・シェルによる制限

などがありますから。
newに関しては、mallocと異なり直接確保するメモリの量を要求するわけではないので
とりあえずパス。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/07/31 15:07

一般的には知るすべはありません。


特定の環境に特化した方法であったり、独自にライブラリを実装した場合には、知る方法があると思います。

ところで、newは必ずしもメモリ確保を行うためのものではありません。例えば、

void* operator new(std::size_t size, void* ptr) throw();

であれば、メモリ確保は行いませんので、確保できる最大メモリ領域は0です。

また、自作クラスでnew演算子を多重定義した場合には、最大確保量を取得するためのサービスを好きなように追加できるはずです。

この回答への補足

malocで確保出来る最大メモリ領域は決まっていない
と言うことで宜しいのでしょうか。


new演算子で、charの配列のメモリ領域を確保しようとする場合

char * buff;
buff = new char[100000];

も同様に、確保できるメモリ領域は決まっていない
のでしょうか?

補足日時:2006/07/31 14:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!