- ベストアンサー
メモリ管理
Cでメモリー管理に関して次のようなLIBがあればいいなと思っています。 目的:使うたびに確保、開放では効率がわるいので共通の領域を使いまわす 条件:XXXMallocで使用するサイズはバラバラ (1)メモリーをまとめて「XXXLIBの領域」用に確保 (2)XXXMallocを実行するとメモリ管理が「XXXLIBの領域」から切り出してくる ここで足りなければ自動で大目に確保 (3)不要になったらXXXReleseで開放し、あとで使いまわしする こんなものが存在する事を知っている方は教えてください。
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- [C言語]freeする領域のサイズは誰が管理?
趣味でプログラミングの勉強をしています。 C言語で、ふと疑問に思いましたので質問させていただきます。 動的に領域を確保するときにはmalloc()にサイズを与えて、その領域のアドレスを取得します。 で、解放するときにはfree()に領域のアドレスを与えます。 ここで疑問に思ったのですが、領域を開放する場合にはその領域のアドレスとサイズが必要ではないかと思うのですが、free()ではアドレスしか与えませんよね? 誰かがアドレスとサイズが対になった情報を管理する必要があると思うのですが、誰が管理しているのでしょうか? 単純に考えてコンパイルしてできた実行形式のファイル中(あるいは呼ばれる外部ライブラリ?)にその機能があると思うのですが、それで合っていますか? よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 自アプリ内のメモリを管理したい
こんにちは。 現在C/C++でプログラムを組んでいます。 C/C++でメモリを確保、開放するにはmalloc、new、free,deleteを使うわけですがアプリケーションが開始された時点で、ある一定のメモリを確保しておいてそのメモリから分け与えたりデフラグしたりして自分のアプリで使うメモリを管理したいと思っています。 BYTE* g_allMemory;//グローバル変数 g_allMemory = new BYTE[1024]; プログラムを実行した時点でこのようにメモリを確保しておき要所要所で自作関数を利用してメモリを分け与えたりデフラグしたりして使えるようにしたいのです。 しかしデフラグした瞬間に変数のアドレスがずれてしまって使い物になりません。 これを解決したいのですがアドバイスやお勧めのホームページや参考文献などがあったら紹介をお願いします。
- ベストアンサー
- C・C++・C#
- GDI+におけるメモリの開放について
C++でGDI+のコードを書いています。 たとえば Gdiplus::Bitmap bmp(1000, 1000); を一度呼ぶと、アプリケーションを終わらすまで確保した領域が開放されず、 繰り返し呼ぶと使用メモリがどんどん増えていってしまいます。 確保したBitmapを開放するにはどうしたらよいのでしょうか?
- ベストアンサー
- C・C++・C#
- Linuxのメモリ管理
Linuxのfreeメモリとは、Top等のコマンドで見えるfree+buff+cacheと思っていますが、Linuxを使用しているとfree領域がどんどんなくなっていき、buff, cache領域が増加していきます。 free領域が枯渇しそうになって(表示上10Mぐらい?)いて、swapdとかが動作しているにもかかわらず、buff, cacheを開放したりしないのでしょうか? この辺のLinuxのメモリ管理方法をご存知の方、いらっしゃいましたら御教授願えませんでしょうか 掲載HP等でも良いので情報頂ければ助かります。 宜しくお願い致します。
- ベストアンサー
- Linux系OS
- メモリリークについて
VC6.0でデバッグ実行すると Detected memory leaks! Dumping objects -> ソースファイル名(932) : {136739} normal block at 0x00FD4AC0, 0 bytes long. Data: <> メッセージがあり メモリがリークしているようです メッセージやソースから察するに 0バイトの領域を確保し それを解放したときに起こっているようです 領域をmallocして 解放ではNULLでなければ解放 という処理はしてはいけないことなのでしょうか 0バイトの領域を確保した場合 又は0バイトの領域を確保しないように 処理しないといけないのでしょうか? 知識のある方よろしくお願い致します
- ベストアンサー
- C・C++・C#
- 配列を宣言した際メモリ内の様子
「配列」を宣言した際、メモリ内では何が起きているのでしょうか? 配列宣言した際にメモリ内にて、複数のデータを格納する為に、メモリー領域がまとめて確保され、その確保した領域に名前が付けられるのでしょうか? 分かりやすく教えてください。 よろしくお願いします。
- 締切済み
- その他([技術者向] コンピューター)
- メモリの開放について
いつもお世話になっております。 メモリ開放のお作法について教えてください。 int* p ; p = (int*)malloc( 100 * sizeof( int ) ) ; ※ p = (int*)malloc( 100 * sizeof( int ) ) ; ※ p = (int*)malloc( 100 * sizeof( int ) ) ; free(p); このような記述をした場合、※の付いている2行でメモリ確保した 領域は開放されるのでしょうか。 (メモリ確保に失敗した場合の処理は省略してます。) よろしくお願いします。
- ベストアンサー
- C・C++・C#
- メモリ操作関数『malloc(),free()』
/*10バイトのメモリ領域を確保し、その領域に文字列"Allocate"を代入せよ。*/ /*ただし、確保した領域は、プログラム終了までに開放すること。*/ #include<stdio.h> #include<stdlib.h> void main(void) { char *ptr; ptr = (char *)malloc(10); printf("Allocate\n"); free(ptr); } 今、ライブラリ関数を勉強しています。 この問題をとりあえず作ってみて、実行も成功したのですが、10バイトのメモリ確保の数値を変えても、何も変わらないため本当に問題の要求どおりのプログラムが作れているのか謎です。 間違っているなどのアドバイス宜しくお願いします。
- ベストアンサー
- C・C++・C#
- メモリ領域確保に関して
C言語を始めて3ヶ月の初心者です。 下記のような定義で、領域確保をしたいのですが、 うまい方法がわかりません。 ご存知の方いらっしゃいましたら、 御知恵をお貸し下さいませんでしょうか? <test.h> ================================== #define SIZE_A (5) /* 親構造体 */ typedef struct { int testInt; testSmallStructT *testSmall; // 7バイト構造体の配列 char *testChar; // SIZE_A分の領域*配列数 } testBigStructT; /* 7バイト構造体 */ typedef struct { char str1[3]; char str2[4]; } testSmallStructT; /* メンバ変数 */ testBigStructT gTest[10]; ================================== ここで、あらかじめ全体の領域サイズを算出して、 mallocにてエリア確保を行う方法を求めてます。 また、多数にmallocを使用するとメモリ確保失敗時に、 それまで確保したエリアの開放を行わなくてはいけなくなる懸念から、 できるだけ使用しないようにしたいのです。 メンバ変数gTestを10の配列で持ち、構造体testBigStructTの、 要素testSmallとtestCharを可変の配列として扱いたくポインタ定義をしており、 更に、testCharにSIZE_A(5byte)の領域を確保しようとしております。 最終的には、下記のような使い方をしたいのですが、 メモリ確保の方法がわかりません。 =================================== (EX:) strcpy(gTest[0].testSmall[0].str1,"aaa"); strcpy(gTest[3].testSmall[2].str2,"bbb"); strcpy(gTest[6].testChar[3],"cccc"); =================================== 開放は下記の記述で問題ないと思っております。 free(gTest); 大変申し訳御座いませんが、 ご指摘・ご指導願いませんでしょうか? どうか宜しくお願い致します。
- 締切済み
- C・C++・C#
- mallocで確保するメモリの領域を限定する方法
mallocで確保するメモリの領域を限定する方法というものは存在するのでしょうか? 例えば、 mallocを使ってメモリを確保するときに、 アドレス:0x00001000から0x00002000の間でメモリを確保してください。 といった感じです。 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
お礼
回答が遅くなり生ました。 malloc/freeが近いことやっている件は知りませんでした。 lib名は環境が手元にないので不明ですがOSはlinuxです。 mallocでもそう差はないというのはサンプルで試して見ることにします。 たいへん参考になりました。