#author("2017-09-12T17:38:46+09:00","","")
#author("2017-09-12T17:40:26+09:00","","")
** NO.80787 [#lbc5f3bc]

こんにちわ

hspmallocが変数解放を最後に行ってるのに憧れて

定義を探してるのですが 自分の検索スキルではみつからなくてですね

hsp3struct.hに

 //  Plugin info data (3.0 compatible)
 331	typedef struct HSPEXINFO30
 381	    char *(*HspFunc_malloc)( int size );

と書いてあるところまで辿れたんですけど

その処理をどこに書いてるのかわからなくて

記述の箇所を教えていだたけると幸いです

-- Y_repeat氏 2017/7/31(Mon)

** NO.80788 [#q7681e6c]

通常strbuf.cppのsbAlloc関数と思われます。

-- tds12氏 2017/7/31(Mon)

** NO.80789 [#w551bdbf]

ご回答ありがとうございます

strbuf.cppのsbAllocは

返り値で

 91	static char *BlockAlloc( int size )

を呼んでるぽいですね

こういうのはどう検索したらいいのでしょうか

OpenHSPをDLして検索かけるかんじですか?

とはいえtds12さんなら

なんとなく頭に入ってそうですね

-- Y_repeat氏 2017/7/31(Mon)

** NO.80790 [#e2109b1a]

Visual Studioを使っているなら(2013で確認)

ソースのキーワードの上で右クリックしてメニューから

「すべての参照の検索」をすると、

そのキーワードが使われている一覧が出てきます。

そこで代入されているところを探して、

その代入している関数の「定義へ移動」をしました。

-- tds12氏 2017/7/31(Mon)

** NO.80811 [#zb6275c9]

VisualStudio2012でやってみました

無事、動作を確認出来ました

ありがとうございました

追記 OpenHSPからのDLの仕方がわからなくて

試行錯誤した後 ググったらzakkiさんのgithubんとこに

ちょっと古いかもしれないですが 一式あったので

メモ的追記でした

-- Y_repeat氏 2017/8/3(Thu)

** NO.81220 [#dcf11cdc]

例えば DLLとかは メモリーリークってどんなかんじなんですか?

少々メモリーリークしてても リークしてるアプリとかが終了した場合

リークしてるメモリ含め 返却されるもんなんですか?

僕の考えはそれっぽくて 少々メモリーリークしてもいいかな?って結論です

メモリーリーク寛容で作ってた場合

メモリーリーク少々してても アプリ終了で返却なら

下手なメモリ管理でメモリ参照時 なくてエラー

と同じようなリスクのような気がするんですよね

DLLの中でmallocした場合

使用してる関数の中でmallocして

関数抜けてもその変数は生きてるっぽいのですが

そのような場合

mallocはHSPmallocでして

onexitした場合にfreeすればOKっぽいっすね

onerrorの処理も書かなきゃダメなのかなあ

-- Y_repeat氏 2017/9/3(Sun)

** NO.81303 [#qa29e655]

質問が漠然としすぎだったのでまとめてみます

mallocしてメモリを割り当てると

そのexeが終了した時

割り当てたメモリは解放されるんですか?

dllの中でmallocしたメモリはどうなんすか?

自分的には解放してくれそうに思うんですが

あくまでも推測の域を出ず

詳しい人のおすみつきが欲しい訳であります

Yahoo!知恵袋に行きなさいなら行くので

よろしくお願いします

-- Y_repeat氏 2017/9/10(Sun)

** NO.81304 [#ff8ebd98]

> mallocしてメモリを割り当てると

> そのexeが終了した時

> 割り当てたメモリは解放されるんですか?

はい。

開放されます。

> dllの中でmallocしたメモリはどうなんすか?

dllが生きてる限りはメモリ・リークのままでしょうね。

-- 科学太郎氏 2017/9/10(Sun)

** NO.81305 [#f5e27edd]

回答ありがとうございます

ただ まだもやもやしてて

というのもCはdllの中で使いたいので

>> dllの中でmallocしたメモリはどうなんすか?

>dllが生きてる限りはメモリ・リークのままでしょうね。

ということですが

exeが終了した時 exeの中で呼び出した

dllの中でmallocしたメモリも解放されるんですか?

onexitとonerrorの処理で明示的にdllを解放しなきゃいけないんですか?

どうも質問ばっかでスイマセン

-- Y_repeat氏 2017/9/10(Sun)

** NO.81306 [#g0d5cffb]

DLL が終了する際、DllMain が呼ばれて、その中の fdwReason に関数の呼び出し理由が

設定され、それが DLL_PROCESS_DETACH である場合 DLL 終了のメッセージなので、

そこで DLL で確保したメモリーを解放すればいいんじゃないの?

-- MillkeyStars氏 2017/9/10(Sun)

** NO.81307 [#ra042c42]

重箱の隅をつつくような書き込みで申し訳ない

DLL作成においてmallocの使用が全然イメージ出来ないんですよね

DLLじゃなくても使ったことないんですが

>そこで DLL で確保したメモリーを解放すればいいんじゃないの?

なるほどそういうことでしたらHSPmallocでまとめて解放出来たら楽っすね

>DLL が終了する際

DLLはexeの終了と共に終了すると思っていましたが

明示的に終了させる必要があるんですか?

ちょっとググったら

>プログラムを終了させるには、exit()を使います。

と書いていたんですが

DLLの中でexit()の使用でDLL終了という認識でOKですか?

-- Y_repeat氏 2017/9/10(Sun)

** NO.81315 [#n445714d]

以前作成したwikiのまとめサイトみたいのに

ここのスレッドの内容をコピペしようと思っているので

コピペして欲しくない人がいましたらご一報ください

いつのまにかスパムに荒らされて移転中でございますが^^;

-- Y_repeat氏 2017/9/10(Sun)