メモリについて

このQ&Aのポイント
  • C++を使ったBecky!のプラグイン作成中のメモリについての質問です。
  • 作成したプラグインはメッセージを表示するため、メモリが食いつぶされる可能性があるか尋ねています。
  • ご教示いただけると幸いです。
回答を見る
  • ベストアンサー

メモリについて

お世話になります。 現在、Becky!のプラグインを作成しております。 とりあえず思うような動きにはなったのですが、今回初めてC++ を使ったので、作成したものの正直なところあまり理解して 出来ておりません。 作成したプラグインは送信ボタンが押されたときにメッセージを 表示するもので、メッセージの本文はiniファイルから読み込む ようにしております。 char buf[256]; DWORD ret; ret = GetPrivateProfileString("message", "msg", "メッセージ無し", buf, sizeof(buf), "C:\\Program Files\\RimArts\\B2\\PlugIns\\becky.ini"); で、bufの内容をMessageBoxで表示してます。 そこで質問ですが、当該プラグインが実行される都度、メモリが食いつぶされて しまうってことはあり得るのでしょうか。 メッセージが表示され、OKまたはキャンセルボタンが押されたら、 そこでメモリは解放されるという認識なのですが。。 ご教示の程、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.2

そうですね、基本的にはmallocやnewの解放忘れはメモリリークにつながると思います。 Windows環境であれば、Windows APIを使って確保したメモリ領域やハンドルリークなどもあったりします。 http://keicode.com/iis/iis504.php C++でしたらスマートポインタを使ってメモリリークを防ぐ方法もあります。 http://qiita.com/hmito/items/db3b14917120b285112f

参考URL:
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_05.html
naoto0216
質問者

補足

度々のご回答ありがとうございます。 んー。。難しいですね(笑 恐らく今回プラグインを作成したら、今後作成することは ないので、あまり深く知る必要も無いのかなーと思って たのですが、バグによってPCの挙動がおかしくなったりしたら シャレになりませんもんね。。 色々勉強させて頂きました。 ありがとうございました。

その他の回答 (1)

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

上記コードにメモリを確保する処理(mallocなど)は含まれていないので、 メモリリークは発生しないように思います・・・。 気になるようでしたら、プラグインを長時間など使ってみて プロセスのメモリ使用量を経過観察する感じでしょうか。

参考URL:
https://www.wingfield.gr.jp/blog/2010/02/03/p1680/
naoto0216
質問者

補足

heburusuさま ご回答ありがとうございます。 普段、AccessVBAや秀丸メールのマクロを作成することが あるのですが、その際は特にメモリについては意識して おりませんでした。 今回初めてC++で作成するにあたり、たまたま「メモリ管理」という キーワードを見つけて、気になった次第です。 メモリ使用量については確認してみたいと思います。 勉強不足で大変恐縮ですが、malloc等のメモリを確保する ような関数を使用してなければ、基本的には特に意識する 必要は無いのでしょうか。 宜しくお願い致します。

関連するQ&A

  • Becky 自作プラグインが表示されない

    お世話になります。 Visual StudioにてBeckyのプラグインを作成しました。 こちらのサイトを参考にしてます。 http://d.hatena.ne.jp/modalblue/20070921/1190374412 単純に送信ボタンが押されたときにメッセージを表示 するだけのものです。 で、当該プラグインを作成したPC上のBeckyでは ツール⇒プラグインの設定⇒作成したプラグイン名 が表示 されます。 で、別のPCに作成したプラグイン(DLLファイル)をコピー しましたが、ツール⇒プラグインの設定⇒作成したプラグイン名 が 表示されません。 たしか、PlugInsフォルダにコピーして、一発目の起動のときは 「新しいプラグインがシステム上に見つかりました」みたいな メッセージが表示されるかと思いますが、それすら表示されず。 なお、 C:\Program Files\RimArts\B2\PlugIns フォルダ と C:\Becky\ユーザー名\PlugIns フォルダ の両方にDLLファイルをコピーしてみましたが、それでも 適用されませんでした。 作成したPC上ではちゃんと適用され、他のPCでは適用されない ってことは、DLLファイルで何かを参照しにいって、作成したPCでは それがあるからOK、他のPCでは参照できないからNG・・・って ことなのでしょうか。。 ※今回初めてVisual Studioにてプログラムを作成したので、あまり  詳しくない状態でなんとか作成した次第です。 ご教示の程、宜しくお願い致します。

  • Becky!のプラグインについて

    Becky!のプラグインでデフォルトで入ってくる ・Becky! Multicolor Icons(_b2icon_256.dll) ・Becky! PGP(BkPGP.dll) ・Becky! 音声添付プラグイン(BkVoice.dll) って どんな事ができるプラフインですか? 場所はC:\Program Files\RimArts\B2\PlugIns と判ってますので・・ あんま必要なかったら消そうかと・・ 何するプラグインか教えて下さい よろしくお願いいたします

  • Becky! Blog Rederプラグイン再設定

    ノートPCのマザーボードが壊れてしまい、HDDを取り出してデータの移行を行っています。 Becky! Blog Rederプラグイン再設定をしようとしてProgram Files\RimArts\B2\PlugInsのフォルダーを コピーして、Becky! を起動させたのですが、以前の設定を引き継いでいません。Becky! Blog Rederプラグインの以前の設定を引き継ぐにはどうしたらよろしいでしょうか?

  • C++ WinAPIの使い方について

    WindowsAPIの GetPrivateProfileString を使用していますが、下記のエラーが出てしまいます。 error C3861: 'GetPrivateProfileString': 識別子が見つかりませんでした ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード インポートライブラリ:Kernel32.lib を使用 以上2点が問題だとは思うのですが、インクルード以外のやり方が分かりません。 コードは以下です。 char buf[256]; GetPrivateProfileString("COMMON","ZIPPATH","localhost",buf,sizeof(buf),"C:\tool.ini"); 御存じの方がいれば、ご教授いただけると幸いです。 よろしくお願いします。

  • iniファイルの読み込みについて

    お世話になります。 現在、Becky!(メーラー)のプラグインを作成しております。 プラグインの内容としては送信ボタンが押されたときに、メッセージを 表示するだけのものです。 なお、メッセージの本文はiniファイルに記載しており、その内容を読み込んで 表示しております。 そこで質問ですが、通常であればMessageBox(NULL,"本文1\r\n本文2"・・・ とすることにより   本文1   本文2 と改行されてメッセージ表示されるかと思いますが、 iniファイルに同じように記載しても   本文1\r\n本文2 と表示され\r\nが文字列として認識されてしまいます。 このような場合、どのように対処すればよいのでしょうか。 ご教示の程、宜しくお願い致します。

  • 物理メモリがたくさんあっても仮想メモリ不足?

    すんません。質問させてください。 Win2kなのですけど、物理メモリを2GB搭載してます。 これくらいあるのだったら仮想メモリはOFFに出来るかな?っと 思ってOFFにしてみたのですけど、起動時にのっけから「仮想メモリが少なすぎる」とエラーメッセージが出るようです。臨時の20MBほどの仮想メモリも作っているようっす。 過去にXPにて512MB位で仮想メモリをOFFにしても、 とたんにエラーメッセージというほどではなかったと記憶してます。 仮想メモリON、OFF自体にはそんなに興味があった訳ではないのですが、2Kにて余りに簡単にメモリ不足ってのが妙~なかんじでして;;ある程度アプリetc使ってて仮想メモリ不足ってのならフツーだと思ってたんですが、OS起動時からこれなのか!と。 何か致命的なミスをしてるような気がしないでもないです(笑) 何でもよいのでご教授くださいませm(*- -*)m 仮想メモリを500MBほどくれてやるとエラーはでないようです。 若干レジストリも弄ってます。 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "ClearPageFileAtShutdown"=dword:00000000 "DisablePagingExecutive"=dword:00000001 ←これ?物理メモリにカーネルうんたら? "IoPageLockLimit"=dword:00010000 "LargeSystemCache"=dword:00000000 "NonPagedPoolQuota"=dword:00000000 "NonPagedPoolSize"=dword:00000000 "PagedPoolQuota"=dword:00000000 "PagedPoolSize"=dword:00000000 "PagingFiles"=hex(7):00,00,00,00 "SecondLevelDataCache"=dword:00000000 "SystemPages"=dword:000c3000 "PhysicalAddressExtension"=dword:00000000 "LargePageMinimum"=dword:ffffffff "WriteWatch"=dword:00000001

  • Beckyプラグインの初回メッセージ

    お世話になります。 プラグインフォルダにDLLファイルを保存し、その後Beckyを 起動するとプラグインが見つかった旨のメッセージ(ダイアログ)が 表示されるかと思いますが、そのメッセージを再度表示させたい のですが、どのようにすればよいのでしょうか。 なお、プラグインフォルダからいったんDLLファイルを移動し Becky起動→Becky落とす→DLLファイルを戻す→Becky起動 してみましたが、表示されませんでした。 ※現在、自作プラグインの手順書を作成しており、その際、  初回メッセージをキャプチャし忘れたので、再度表示させ  たい次第です。 ご教示の程、宜しくお願い致します。

  • Becky!送信時に任意のメッセージを表示

    お世話になります。 社内では秀丸メールを使用しており、マクロにて誤送信防止のメッセージを 表示しております。 但し、社内にある2台のPCに限ってはBecky!を使用しているのですが、 同等のメッセージが表示できるようなプラグインがありません(探しきれて おりません)。 ※普段わたしは秀丸メールしか使ってないので、Beckyのプラグインが  どういう形式なのか、インストール(特定のパスに保存?)についても  まだ把握してない状況です。 単純に送信ボタンがおされたときに任意のメッセージを表示するだけ でよいのですが、そのようなプラグインはございませんでしょうか。 元々の機能で宛先確認のメッセージを表示できるようですが、任意の メッセージを表示出来るものを探しております。 例えば、送信時に確認メッセージを表示するようなプラグインがあり そのメッセージの部分だけでもカスタマイズできれば・・と思うのですが、 秀丸マクロと違ってエディタで開いてコーディングって訳にはいかない んですよね?開発環境が必要?? その辺を含めご教示頂けると幸いです。 宜しくお願い致します。

  • Becky! Regバックアップ フォルダパス

    Becky! Regバックアップ フォルダパス お世話になります。 何かと使い勝手が良いのでBecky!(v2.55)を使っております。 バックアップリストアの方法についてはFAQや過去ログで分かるのですが、 疑問なのはバックアップした際のフォルダーパスがリストア環境と異なる場合です。 D:\Becky\userにユーザーフォルダをインストール時に設定します。 (本体インストール先はデフォルトのC:\Program Files\RimArtsです。) バックアップは D:\Becky\userフォルダごとコピー保存 レジストリHKEY_CURRENT_USER\Software\RimArts\B2をエクスポート(*.reg) リストアは本体インストール後、ユーザーフォルダをD:\Becky\userとし、 バックアップしたuserフォルダごと上書きしています。 (インストール時に新規に出来るフォルダは削除します。) その後、レジストリファイルとしてバックアップしておいた*.regを結合。 このやり方で随分経ちますが、問題は起きていませんでした。 そこで問題となるのは、新環境でのユーザーフォルダー場所がハードウェア環境の都合で E:\Beckyとなった場合です。 バックアップしたregをテキストエディタで開くと、D:\***という以前のドライブレターが 記された箇所が以下の通りいくつかあるのを確認しました。 [HKEY_CURRENT_USER\Software\RimArts\B2\Misc] "SaveAsFilter"=dword:00000001 "SaveAsDir"="D:\\Bckup\\Mail\\*****\\*********" "AttachSaveDir"="D:\\Documents and Settings\\user\\My Documents" "AttachDir"="D:\\Documents and Settings\\user\\My Documents\\My Pictures" "AddrExportDir"="D:\\Data Backup" "ImportSep"="." "ImportMode"=dword:00000000 "ImportDir"="C:\\Documents and Settings\\user\\デスクトップ" [HKEY_CURRENT_USER\Software\RimArts\B2\Settings] "VersionString"="2.55 [ja]" "DataDir"="D:\\Becky!\\user\\" "DataDirBak"="D:\\Becky!\\user\\" →個人的にマイドキュメントのターゲットはD:~に変更しています。  (新環境ではE:~に変更します。) これらは新環境ではD:\でなくE:\となるので、その部分を変更するだけでOKでしょうか?

  • VBAで「メモリが不足しています」

    VBAツールを作成しました。それぞれ3000行位のデータの1列を取得して、テキストファイルに書き出すツールです。 それが5シート分あり、ボタンを押して実行させます。 標準モジュールに関数が6個 各シートモジュールは関数7個×4シート分 極端に多いモジュールではないと思います。 「メモリが不足しています」と表示されるようになり、 これ以上記入もできない状態です…。 エクセル自体は18MBあります。 PCのCドライブには8GB空きがあります。 PCを変えてエクセルを開いてみても、開いた途端に「メモリが不足しています」と出ます。 どの関数の実行ボタンを押しても、実行はされず、メッセージが出るだけです…。 助けてください!!!

専門家に質問してみよう