こんにちは.mallocの動作,及びコンパイルの仕様について質問です.
以下のような.cのプログラムを書いてgccでコンパイルして実行してみました.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int size = 0;
int *tmp = NULL;
while(1){
printf("Size %d\n", size++);
tmp = (int *)malloc(size * 1024 * 1024);
usleep(10000);
free(tmp);
}
}
このプログラムだと,heapから取ってこれないぐらい大きいメモリだとなんか起きるのかな?どれぐらいまで取ってこれるのかな?という興味でやってみたのですが,
1)32bit, 64bit ubuntu のgcc (バージョンは覚えてないですけど一番updateされてると思います)では永遠に回り続け,
2)Mac のgccだとSize=2048以降,つまり2GB以降で
a.out(1145,0x7fff73a1b310) malloc: ***mach_vm_map(size=18446744071562067968) failed (error code=3)
*** error: can't allocate region
というエラーをはきます.(プログラムは回り続けます)
a. この違いはgccの違いからくるという理解でよろしいですか?Macでの2GBというのもコンパイル側の制約なのでしょうか?
b. ubuntuでは実際何が起こってるのでしょう?1000GBとか絶対取れないですけど回ってますし.
c. ubuntuで実際に何が起こってるかを確認する方法はありますか.アセンブラとか吐かせるのでしょうか?
お時間のあるときに回答してもらえたらと思います.
No.2ベストアンサー
- 回答日時:
>デフォルトでは、Linux は楽観的メモリ配置戦略を用いている。つまり、 malloc() が NULL でない値を返しても、そのメモリが実際に利用可能であること が保証されない。
No.4
- 回答日時:
ついでだけど, 「Macでの2GB」ってなんのことですか? 実際に「確保しようとしたサイズ」はいくつですか?
返信ありがとうございます.上のプログラムは確保するsizeをインクリメントしていき,どこでどういう動作になるか見るプログラムでした.2GBというのは,Macがエラーを吐き始めたsize=2048, つまり2048*1024*1024byteで2GBという意味でした.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大容量のメモリ確保をスワップ...
-
エクセルのメモリ使用状況/Appl...
-
Apacheでバーチャルホストの最...
-
変数をあなたの身近なものに例...
-
LoadLibraryしたらFreeLibrary
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
動的メモリとexit(C言語)
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
closeとメモリの開放について
-
VBAの配列サイズとメモリに関して
-
C#におけるexeファイルのサイズ...
-
メモリが不足しています(VBA)
-
プログラム開発勉強専門のPC...
-
64bit C#アプリ メモリをたくさ...
-
メモリを解放しないとどうなる?
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
エクセルVBA 大容量CSVファイル...
-
EXCEL-VBAにてADOのレコードセ...
-
バッチファイルでの実行EXEのメ...
-
メモリ不足
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
C言語:関数のメモリ上でのサイ...
-
メモリの解放の仕方
-
VC++におけるメモリ使用量について
-
メモリの消費量について
-
Bitmapを重ね合わせる方法
-
メモリを解放しないとどうなる?
-
C#のOutOfMemoryException発生...
-
メモリの解放について VB6 VBA
おすすめ情報