hspmallocに関するスレッド

NO.80787 †
こんにちわ
hspmallocが変数解放を最後に行ってるのに憧れて
定義を探してるのですが 自分の検索スキルではみつからなくてですね
hsp3struct.hに
// Plugin info data (3.0 compatible)
331typedef 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は
返り値で
91static 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)