a22_memman05
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* メモリ管理#5
-(by [[K]], 2022.03.10)
** (1)
-C言語はC++言語とは異なり、クラスに対して強制的にコンスト...
-いや、それならそもそもCなんか使わずにC++を使えばいいじゃ...
** (2)
-私がCでクラスっぽいことをやりたいときは、structで構造体...
-Cでクラス処理の真似をすると、最初に面倒に感じるのは、デ...
-そこで私は、デストラクタを直接呼び出さなくてもいい仕組み...
ABegin(c1);
Test a[1], b[1], c[1];
Test_init(a, c1); // こうすることで、AClean_out(c1)した...
Test_init(b, c1);
Test_init(c, c1);
Test_say(a, "hello");
...
AClean_out(c1); // これでa,b,cはdeinit()される(c,b,aの順...
-mallocしたのにfreeし忘れるというバグも時々あります。だか...
ABegin(c1);
Test a[1], b[1], c[1];
Test_init(a, c1); // こうすることで、AClean_out(c1)した...
Test_init(b, c1);
Test_init(c, c1);
char *d = aMalloc(1234, c1);
Test_say(a, "hello");
...
AClean_out(c1); // ここでfree(d)もしてくれる.
-これならAClean_outだけを忘れないようにすればいいことにな...
-このclean-out方式は、コードサイズ削減の観点でもメリット...
-ただしABegin()の分や、ACleanクラスのメンバ関数の分のコー...
** (3)
-このclean-outの仕組みがあることで、free忘れやデストラク...
-しかしまだ防げないものがあります。それは開放タイミングを...
-でも大丈夫です。そんなポカをやってしまっても、直ちにエラ...
-それだけではありません。この仕組みはinit忘れも検出します...
** (4)
-プログラムがどのくらいメモリを使っているのか調べたくなる...
AMemAlc0_report1(); // これで消費量がわかる.
...
AMemAlc0_report1(); // これで消費量がわかる.
-これでメモリリークがありそうだとわかっても、さて原因は何...
-そうすると、initされていてまだdeinitされていないオブジェ...
--なお、この「生きているオブジェクトの一覧」の情報を使っ...
** (5)
-今はメモリをどのくらい使っているのかとか、どのオブジェク...
-そうすると、「じゃあそんな機能は使いたくない」になってし...
-デバッグレベル=1でコンパイルすると、簡単かつ低オーバー...
-デバッグレベル=2でコンパイルすると、妥協せずにバグ探し...
-プログラムをリリースするときはデバッグレベル=0にする前...
** (6)
-さてあれこれと機能を盛り込んでしまいましたが、こんなにい...
-軽く調べてみた感じでは、C言語だけで頑張って書いた場合と...
** (7)
-一般にC言語では、ヒープメモリに対するメモリアロケータはm...
-しかし私の作ったライブラリでは、アプリ用の一般アロケータ...
-こうすることで、(5)で紹介したデバッグレベルをいくつに設...
** (8) まとめ・感想
-結局C++の仕組みに勝ったかどうかで言うと、勝っていないと...
-ただ、もし私がこれを何十年も前に作れていたら、C++は今の...
** (9)
-まだ細かいところはできていないのですが、私が隠し持ってい...
--http://k.osask.jp/files/acl02c_win.zip
--http://k.osask.jp/files/acl02c_sdl2.zip
// ASP. カスタムアロケータ. longjmp.
終了行:
* メモリ管理#5
-(by [[K]], 2022.03.10)
** (1)
-C言語はC++言語とは異なり、クラスに対して強制的にコンスト...
-いや、それならそもそもCなんか使わずにC++を使えばいいじゃ...
** (2)
-私がCでクラスっぽいことをやりたいときは、structで構造体...
-Cでクラス処理の真似をすると、最初に面倒に感じるのは、デ...
-そこで私は、デストラクタを直接呼び出さなくてもいい仕組み...
ABegin(c1);
Test a[1], b[1], c[1];
Test_init(a, c1); // こうすることで、AClean_out(c1)した...
Test_init(b, c1);
Test_init(c, c1);
Test_say(a, "hello");
...
AClean_out(c1); // これでa,b,cはdeinit()される(c,b,aの順...
-mallocしたのにfreeし忘れるというバグも時々あります。だか...
ABegin(c1);
Test a[1], b[1], c[1];
Test_init(a, c1); // こうすることで、AClean_out(c1)した...
Test_init(b, c1);
Test_init(c, c1);
char *d = aMalloc(1234, c1);
Test_say(a, "hello");
...
AClean_out(c1); // ここでfree(d)もしてくれる.
-これならAClean_outだけを忘れないようにすればいいことにな...
-このclean-out方式は、コードサイズ削減の観点でもメリット...
-ただしABegin()の分や、ACleanクラスのメンバ関数の分のコー...
** (3)
-このclean-outの仕組みがあることで、free忘れやデストラク...
-しかしまだ防げないものがあります。それは開放タイミングを...
-でも大丈夫です。そんなポカをやってしまっても、直ちにエラ...
-それだけではありません。この仕組みはinit忘れも検出します...
** (4)
-プログラムがどのくらいメモリを使っているのか調べたくなる...
AMemAlc0_report1(); // これで消費量がわかる.
...
AMemAlc0_report1(); // これで消費量がわかる.
-これでメモリリークがありそうだとわかっても、さて原因は何...
-そうすると、initされていてまだdeinitされていないオブジェ...
--なお、この「生きているオブジェクトの一覧」の情報を使っ...
** (5)
-今はメモリをどのくらい使っているのかとか、どのオブジェク...
-そうすると、「じゃあそんな機能は使いたくない」になってし...
-デバッグレベル=1でコンパイルすると、簡単かつ低オーバー...
-デバッグレベル=2でコンパイルすると、妥協せずにバグ探し...
-プログラムをリリースするときはデバッグレベル=0にする前...
** (6)
-さてあれこれと機能を盛り込んでしまいましたが、こんなにい...
-軽く調べてみた感じでは、C言語だけで頑張って書いた場合と...
** (7)
-一般にC言語では、ヒープメモリに対するメモリアロケータはm...
-しかし私の作ったライブラリでは、アプリ用の一般アロケータ...
-こうすることで、(5)で紹介したデバッグレベルをいくつに設...
** (8) まとめ・感想
-結局C++の仕組みに勝ったかどうかで言うと、勝っていないと...
-ただ、もし私がこれを何十年も前に作れていたら、C++は今の...
** (9)
-まだ細かいところはできていないのですが、私が隠し持ってい...
--http://k.osask.jp/files/acl02c_win.zip
--http://k.osask.jp/files/acl02c_sdl2.zip
// ASP. カスタムアロケータ. longjmp.
ページ名: