NO.80787

こんにちわ

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

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

  • tds12氏 2017/7/31(Mon)

NO.80789

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

strbuf.cppのsbAllocは

返り値で

91	static char *BlockAlloc( int size )

を呼んでるぽいですね

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

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

とはいえtds12さんなら

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

  • Y_repeat氏 2017/7/31(Mon)

 NO.80790

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

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

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

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

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

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

  • tds12氏 2017/7/31(Mon)

NO.80811

VisualStudio2012でやってみました

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

ありがとうございました

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

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

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

メモ的追記でした

  • Y_repeat氏 2017/8/3(Thu)

NO.81220

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

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

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

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

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

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

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

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

DLLの中でmallocした場合

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

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

そのような場合

mallocはHSPmallocでして

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

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

  • Y_repeat氏 2017/9/3(Sun)

NO.81303

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

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

そのexeが終了した時

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

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

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

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

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

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

よろしくお願いします

  • Y_repeat氏 2017/9/10(Sun)

NO.81304

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

> そのexeが終了した時

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

はい。

開放されます。

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

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

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

NO.81305

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

ただ まだもやもやしてて

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

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

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

ということですが

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

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

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

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

  • Y_repeat氏 2017/9/10(Sun)

NO.81306

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

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

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

  • MillkeyStars?氏 2017/9/10(Sun)

NO.81307

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

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

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

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

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

>DLL が終了する際

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

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

ちょっとググったら

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

と書いていたんですが

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

  • Y_repeat氏 2017/9/10(Sun)

NO.81315

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

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

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

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

  • Y_repeat氏 2017/9/10(Sun)