#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)