X



GCは失敗。メモリは自分で管理せよ! その2©2ch.net
0001デフォルトの名無しさん 転載ダメ©2ch.net垢版2015/11/18(水) 23:24:59.79ID:BUQ68wTG
GC、ガベージコレクション、ガベージコレクタ、ガーベジコレクション、ガーベジコレクタは使えない。
以下GCと記す

プログラマをメモリ管理から開放する!
といいつつ、メモリリーク問題の文献が大量にある。
これすなわち、メモリリーク問題が全然解決していないということ。
さらに、メモリ解放のタイミングの文献まで大量に生み出した。
これすなわち、新たなるメモリ管理に関する問題を生み出したということ。

malloc、freeじゃないが
結局のところ、メモリを管理するという技術は、今しばらくは、身につける・教える・学ぶべきではないだろうか?
使って、そのまま放置しても、基本的にはGCがなんとかしてくれている。
ランジョブからジョブ終了までさほどの時間を要さない。メモリも大して使わないならいいだろう。
しかし、規模が大きくなり常駐ジョブやメモリ大量使用のジョブになってくると、そんなメモリ管理の方法でやっていると、
上記「文献」を生み出されてしまう。

入門時は、メモリに無頓着でもいいだろう。それよりも、目的を達成することが先決だ。
しかし、慣れてきたら、やはりメモリの管理まで余裕を持って自分で行うべきだろう。

前スレ
GCは失敗。メモリは自分で管理せよ!
http://peace.2ch.net/test/read.cgi/tech/1412986420/
0670デフォルトの名無しさん垢版2017/09/17(日) 16:13:26.66ID:iyMogwhx
mallocやnewは
大きなサイズを確保するときと
小さなサイズを確保するときで
アルゴリズムが切り替わる
0671デフォルトの名無しさん垢版2017/09/17(日) 16:17:08.43ID:iyMogwhx
VC++2015での実行結果

auto a = malloc( 10 );
auto b = malloc( 10 );
wchar_t tmp[ 100 ];
::swprintf_s( tmp, 100, L"a = %x, b = %x \n", a, b );
::OutputDebugString( tmp );

----------------------------------------

a = 10a4f0, b = 10a508

残念でしたね
0672デフォルトの名無しさん垢版2017/09/17(日) 16:17:49.54ID:S40DCpdn
MMUは多少以上の処理をすると簡単にフォールト返すのが困りもの
結局初心者レベルのプログラマしか想定してないんだよな
0673デフォルトの名無しさん垢版2017/09/17(日) 16:30:36.71ID:S40DCpdn
>>671
realloc使った事ある?
0675デフォルトの名無しさん垢版2017/09/17(日) 16:37:39.46ID:S40DCpdn
複雑なことをしていると、それがまるで正しいかのように思う点がアフォ
多少複雑なことをしていてもアフォな挙動をする可能性はあると考えるべき
0676デフォルトの名無しさん垢版2017/09/17(日) 17:05:23.31ID:S40DCpdn
malloc,newの挙動の説明ってまんまMMUの説明なんだよな
だから複雑なアルゴリズムを使われていると思うのはMMUが複雑な挙動をしているから
でも、そんなに複雑な挙動してるか??
単に過去のアプリとの互換性の問題で変な事をしているだけだぞ
0677デフォルトの名無しさん垢版2017/09/17(日) 17:16:19.17ID:S40DCpdn
たいがいのmalloc,newはMMU次第でいくらでも挙動が変化するからな
ちゃんとPC毎に動作確認したか??
0679デフォルトの名無しさん垢版2017/09/17(日) 17:55:14.06ID:S40DCpdn
malloc,newの挙動はハードとOSによって変化するという記述は見たことあるけどな
0680デフォルトの名無しさん垢版2017/09/17(日) 18:02:58.95ID:S40DCpdn
ごめん、ハードとソフトウェアだった
0681デフォルトの名無しさん垢版2017/09/17(日) 18:10:58.66ID:hRPbVJUN
ヒープの管理しないでなんとかなるレベルのものはgc言語使えばいいんでは?
このスレの趣旨的にそうでしょ?
0682デフォルトの名無しさん垢版2017/09/17(日) 21:59:59.26ID:S40DCpdn
自分はメモリ対策プログラムを作って対応したけどな。
メモリサイズを三種類用意して、メモリに対するガードの確実な作りにした。
現在のサイズに使われてるサイズにリミットサイズの三種類のサイズな。
外に出てくるサイズは現在のサイズ、
使われてるサイズはメモリを増やした場合の最大取得サイズで、事実上の取得サイズ、
リミットサイズは取得できるメモリの上限。
で、これらを組み合わせてスーパークラスを作って基本的に対応させてる。
0683デフォルトの名無しさん垢版2017/09/17(日) 22:08:00.63ID:S40DCpdn
メモリの増減には現在のサイズで対応し、このサイズが必要以上に大きくなると
使われてるサイズを拡張するようにした。リミットサイズは滅多に使わないけれども、
一応対応させた。
メモリに対する読み書きは専用関数を経由して読み書きするようにしたから、
素人が使っても安全なぐらいのプログラムになってる。
0684デフォルトの名無しさん垢版2017/09/17(日) 22:27:01.93ID:S40DCpdn
あと、動的配列ってのを作って、複数のメモリ取得に対応させた。
メモリにヘッダとフッタを用意して、フッタには複数配列のデータに対応させ、
ヘッダには配列数とメモリサイズを入れてる。フッタには>>682のデータを持たせた。
ある意味では拡張コンパクションみたいなモノになった。
0685デフォルトの名無しさん垢版2017/09/17(日) 22:33:12.53ID:S40DCpdn
で、アローケートが一回だけになるようにして、あとはリアロークで対応させた。
おかげでメモリの消費効率は異常なまでに効率よく使えるようになったよ。
あと、動的配列使う場合はいったんメモリをフォーマットするようにしたけどね。
0686デフォルトの名無しさん垢版2017/09/17(日) 23:21:53.67ID:S40DCpdn
それから、動的配列は入れ子構造にすれば色々と応用がきくようになってるけどな。
で、追記式みたいにデータが動くツリー構造とかが使えるようになってる。
0689デフォルトの名無しさん垢版2017/09/19(火) 04:18:18.94ID:GmtdcLyZ
メモリを動かして処理すれば出来る事なのにな
出来る事を出来ないというのは間違い
0690デフォルトの名無しさん垢版2017/09/19(火) 09:15:50.12ID:sOczhhK4
誰へのレスかすらわからないというね
誰も何も「出来ない」という趣旨のレスはしてないと思うが
独り言かね
0691デフォルトの名無しさん垢版2017/09/19(火) 12:34:55.99ID:kI9ocUjD
前日に連続して意味不明な独り言してるやつがいるからそれの続きだろ
0693デフォルトの名無しさん垢版2017/09/23(土) 13:33:17.07ID:J7EIO5I9
malloc()関数の内部はOSからメモリをまとめて取ってくる処理と、
すでに取ってきたメモリを(free()で空きが生じたとき)やりくりする処理の2本立て

前者の処理(システムコールの呼び出し)は比較的高コストなのでmalloc()の度に呼びはしない
また後者の処理は、連続したアドレス範囲のメモリを確保できている前提で動く

ページングはもっと下のレイヤーで行われるので、
malloc()のコード自体がMMUの有無やOSの違いを関知したりはしない
0697デフォルトの名無しさん垢版2018/05/23(水) 21:27:23.53ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

3682F
0698デフォルトの名無しさん垢版2018/07/05(木) 00:30:07.61ID:RfoszcD2
IZ6
0701デフォルトの名無しさん垢版2018/10/30(火) 23:04:20.19ID:POwfr3jz
GCをルンバで例えたらどうだろう

自動

しかしテーブルの上や
冷蔵庫の中は片付けない

日常生活にさしさわりなく動いてほしい
0702デフォルトの名無しさん垢版2018/10/30(火) 23:46:35.14ID:j0ABINKp
それに加えてルンバが動けるように床は片付けておかないといけないとか
自動で上手く機能させるために気にしないといけない事が色々ある
0703デフォルトの名無しさん垢版2019/07/03(水) 08:55:46.04ID:XKc3eOoC
もういらないって明示的に書かなきゃならないのなら自前で管理するのと一緒だよな。
アマチュアがサンデープログラムしたり、短時間で終了するアプリならむしろ楽チンだけど、
365日24時間稼働し続けるシステムには致命的な問題になるからなぁ
0704デフォルトの名無しさん垢版2020/02/13(木) 08:56:02.27ID:B+Fb/epo
まあ落ちるアプリの多いこと
0705デフォルトの名無しさん垢版2020/02/13(木) 15:29:41.61ID:z5cRWLgY
GCがある言語でも、shallow copy と deep copy のどちらにすべきかの判断が難しくて、結局、間違えてバグの原因になる可能性がかなり残る。

また、C/C++ポインタのミスを危険視する人がいるが、多くの場合はプログラム開発時にテストをすれば間違いが発見できる。

C/C++でのバッファオーバーランを気にする人がいるが、逆にGCがある言語でも、間違って1つ右隣の要素にしてしまったり、処理する個数を1つ間違ったりするミスは有り得て、その場合、厳密な意味でのバッファオーバーランは無くても処理内容自体はバグる。
0706デフォルトの名無しさん垢版2020/02/22(土) 01:52:20.63ID:eI8xgqVo
No GC派なんだけど、WebサーバーをC++とかで実装しても結局力持て余す感はあるよな
それだからかなり性能下げてもいいからちょっとでも早く作れるスクリプト言語採用されるってのもありそう
0708デフォルトの名無しさん垢版2020/02/26(水) 10:49:39.07ID:wiEfavJ1
(destructor)()
dispose()
destroy()
close()
free()
delete
0711デフォルトの名無しさん垢版2022/12/27(火) 15:08:00.70ID:ITKU+yxr
てへっ(∀`*ゞ)テヘッ
0712デフォルトの名無しさん垢版2022/12/28(水) 20:55:42.01ID:kKtGrfmE
おれはGCが最初から分かりづらいなぁと思ってたよ。mallocやnewより
0713デフォルトの名無しさん垢版2022/12/29(木) 10:46:26.29ID:jCj0trE4
>>708
release
0715デフォルトの名無しさん垢版2023/01/01(日) 09:16:28.52ID:A1pcbmVG
>>1は、2014年に問題提起してるのか・・・。

Rustとかは2010年ころ発表だけど、実際に一般に知られるようになったのって2021年頭から
>>1は、それなりに的を射た技術理解・評価をしてるんだな

俺は人気の言語を覚えて、周りが言ってるメリットを、反対派にコピペするだけだけどww

ま、Pythonのお手軽さを超えることはないと思うけど、どこまでRustは伸びるのかなぁ
0718デフォルトの名無しさん垢版2023/02/11(土) 11:51:58.99ID:2GIAa1ZP
>>717
それもいいな
0719デフォルトの名無しさん垢版2023/03/08(水) 00:10:24.00ID:ZNO423TE
GCを含め、「機械に不慣れな人でも簡単にプログラミングできるようにする」という
これまで高級言語が行ってきたような試みはすべてAIに取って替わられるような気がする
まあ、現時点のAIは使い物にならないかもしれないが、いずれは…
レスを投稿する


ニューススポーツなんでも実況