掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLでグローバル変数を使うには? (ID:56316)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
私が問題になったアプリは、結構大きなアプリで、大きくいくつかの機能に分かれています。 仮に機能Aと機能Bと有った場合に、それぞれ機能単位でDLL化を行っており、 機能Aを使用中には、機能BのDLLをロードする必要がないので、機能BのDLLは、 メモリにロードされていない状態になっています。 ここで、機能AのA2という処理まで行った状態で機能Bに切り換えた場合に、 メモリ容量の関係で、機能AのDLLがアンロードされてしまうことがあったのです。 機能Bに切り換えた後に、機能Aに切り換えたところ、 A2の処理から復帰できることを期待していたのですが、 A2の処理に使用するため情報を機能AのDLLのグローバル変数として保持していたのですが、 一度アンロードされていたため、保持していた情報が失われて、バグとなってしましました。 (あまり上手く説明できなくて申し訳ございません。) ここでなぜ機能AのDLLがアンロードまでされるかというと、 恐らく私の問題にしているアプリは、組込み環境でのアプリで、 メモリ搭載量に制限があり、またストレージの耐久性の問題等から、 メモリのスワップを行わないという環境でした。 よって、大きなアプリを使用すると、物理メモリに不足が発生するような状況が 容易に発生し、そのためDLL単位でのアンロードが発生していたと思われます。 今のPCでは、基本的にスワップが行えるので、このような状況はありえないのかもしれませんが、 組込み環境などではまだまだ物理メモリの容量も制限されますし、 HDDは信頼性の問題で、実装できないということもありますし。。。 昔のPCのゲームなどでは、数十KBのメモリと数百KBのディスク内で、 このようなスワップのようなこともそれぞれのプログラムで実装などしていたのには、 非常に感心させられます。。。 (PC88のウィザードリーなどでは、キャンプから抜けるときに発生する、 スワップの処理中にコーヒーが飲めるぐらい時間(数分)がかかりましたが。。。) 最後の方は、無駄話になってしまったような気もしますが、お許しください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.