EditとButtonA、ButtonBがあって、ButtonAを押下するとEdit内の任意の数字分メモリを確保すると言うものを作りました
Pointer := AllocMem(StrToInt(edtMany.Text));
ここまではうまくいきました
しかし、もう一つの違うButtonBを押下すると、Edit内の任意の数字分メモリを解放するという処理が書けません
教えてください><
また、上記のメモリ確保なんですが、大きなサイズを確保しようとすると、やたら遅いです。。。
何か対処法はないでしょうか・・・?
宜しくお願いしますm(_ _)m
> しかし、もう一つの違うButtonBを押下すると、Edit内の任意の数字分メモリを解放するという処理が書けません
「書けない」の意味が不明
1)エディタが破損(クラッシュ)して書けない
2)記述方法がわからない
3)コンパイルエラーになる
4)実行時にエラーになる
> また、上記のメモリ確保なんですが、大きなサイズを確保しようとすると、やたら遅いです。。。
どこかに解説があったような気もするが、みつからんし自分で説明できるほどでもないので割愛。
でも、なぜそのような大きなメモリを確保しないといけないのか?
それを回避する手段はないのか考えたほうがいいと思われる。
指定した分減らしたサイズで新しく領域を確保。そっちにメモリ内容を移動させて、元の領域は完全に解放。これでは駄目ですか?
To:は?さん
>「書けない」の意味が不明
記述方法がわからない、という意味です
ヘルプを見たり、検索してもわかりませんでした
言葉足らずで申し訳ないです
>でも、なぜそのような大きなメモリを確保しないといけないのか?
>それを回避する手段はないのか考えたほうがいいと思われる。
メモリをギリギリまで使用して、メモリ不足のエラーが起こる時の某アプリケーションの挙動を調べたいので、
その状況を作るために、です
なので、回避する手段とかは・・・^^;
To:tu-kaさん
>指定した分減らしたサイズで新しく領域を確保。そっちにメモリ内容を移動させて、元の領域は完全に解放。これでは駄目ですか?
やってみました!
出来ました!!
ありがとうございます〜
でも、予想通りというか、やっぱり遅いっすねぇ。。。
ReallocMem とかそういう意味ではない?
>ReallocMem とかそういう意味ではない?
これってメモリの再割り当てですよね?
え〜と、すいません
これをどう使うんでしょうか^^;
> Edit内の任意の数字分メモリを解放するという処理が書けません
再割り当てそのものだと思うけど
ReallocMem() の ヘルプより
P が nil ではなく Size が 0 以外の場合,ReallocMem は P で参照されるブロックを,Size で指定されるサイズに割り当て直す。ブロック内の既存のデータは再割り当ての影響を受けないが,ブロックのサイズが大きくなった場合には,新しく割り当てられた部分の内容は未定義となる。適切な位置に割り当て直すことができなかったブロックはヒープ内の新しい位置に移され,それに従って P が更新される
既存サイズを小さくして RallocMem() じゃ何でダメなの? 既存データコピーする
必要ないし
>えーとさん
すいません><
てんぱってたので、勘違いしてました^^;
ちゃんとReallocMemで出来ました!
ありがとうございます
それで・・・
メモリ確保時に、やたら時間がかかるのの解決方法、対処方法などがわかる方
どうかお願い致します
また、1つ追加なのですが、メモリをある程度確保するとそれ以上確保が出来なくなります
タスクマネージャ上で確認すると、仮想メモリサイズが2,000,000強になるとそうなるようです
同じアプリをもう一つ起動すると、そちらでは問題なく確保の続き?が出来るのですが・・・
なぜでしょうか?
また、これの対処方法などもあれば教えてくださいm(_ _)m
メモリーマネージャを変えてみる。
http://sourceforge.net/projects/fastmm/
FastMM
//使用例
program Project1;
uses
FastMM4,//ここに宣言で使える。
Forms,
Unit1 in 'Unit1.pas' {Form1};
To:@123さん
もう少し詳しくお願いできませんか^^;
すいません><
って、今気付きましたが、名前を途中で変えちゃってますねorz
誠に申し訳ないm(_ _)m
>uses
> FastMM4,//ここに宣言で使える。
アプリで使った場合は、メモリマネージャ本体も exe の中にコンパイルされるんでしょうか?
つまり、exe 単体で配布出来るかってことですけど。
メンチマーク
http://dennishomepage.gugs-cats.dk/MemManBenchmark047.xls
http://dennishomepage.gugs-cats.dk
すいません
メモリマネージャの変更、僕には難しすぎるようです・・・
他の方法、もしくは、残りの質問の回答募集
ほんと、すいませんです
>また、上記のメモリ確保なんですが、大きなサイズを確保しようとすると、やたら遅いです。。。
>何か対処法はないでしょうか・・・?
Windowsは、物理メモリーが不足するとディスクをメモリーの代わりに使います。ディスクは、
メモリーよりも何十倍も遅いので処理が遅くなって当然です。
>また、1つ追加なのですが、メモリをある程度確保するとそれ以上確保が出来なくなります
>タスクマネージャ上で確認すると、仮想メモリサイズが2,000,000強になるとそうなるようです
>同じアプリをもう一つ起動すると、そちらでは問題なく確保の続き?が出来るのですが・・・
>なぜでしょうか?
Windowsでは、使用できるメモリーサイズに上限があります。Windows2000/XP の場合、標準で
は、1つアプリケーション毎に2GB(約2,000,000バイト)までです。システム全
体では、物理メモリーと仮想メモリー(ディスク)を足した容量が上限です。
このため、仮想メモリーが十分あれば、1つのアプリケーションで幾らメモリーを消費しよう
とも(システム全体のパフォーマンスは低下しますが)別のアプリケーションでメモリー不足
が発生することはありません。
masayanさん
回答有難うございます
そういうことだったんですね
薄々は感付いていたんですが・・・何か手はあるかなぁと思ったので^^;
まぁ、仕様というか、そういうもんだってことで。。。
本件、解決としますm(_ _)m
bluf=Joker?
ペンネームころころ変えるの、
それともレス乗っ取り?
ちゃんと読んだ方がいいですよ。
ツイート | ![]() |