掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ゼロで初期化された文字列のサイズを知るには? (ID:67076)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちょっと見ないうちに増えましたね。 最終的になぜ文字列の確保サイズを知りたいの? メモリ確保に GlobalAlloc しか使わないの? MFC の CString クラスを使えば確保サイズを気にしないでもいいよ。 malloc、new、その他で確保した領域をポインタにセットした時点で ポインタから確保サイズを知るすべはない。 GlobalAlloc、GlobalReAlloc で確保すれば GlobalSize で割り当てたサイズを取得可能。 HeapAlloc、HeapReAlloc で確保すれば HeapSize で割り当てたサイズを取得可能。 この2種類は確保サイズを取得する関数が特別に用意されているだけです。 でも GlobalAlloc で確保した領域を HeapSize 使っても駄目。同じ種類。 > ただメモリ領域を表現するのに、なんでそんなにいろんな方法があるのかな メモリという資産を効率よく使うためでしょう。 http://www.geocities.jp/i96815/windows/win11.html 1...VirtualAlloc、VirtualFree 2...HeapAlloc、HeapFree 3...GlobalAlloc、GlobalFree 4...LocalAlloc、LocalFree 5...new、delete 6...malloc、free などいろいろとあるようだ。5、6 は C/C++ 言語で決まっているため移植性が良い。 Windows OS 限定(Windows専用)なら 1〜4 を使っても良い。 1 は大きいメモリを常に使い続ける場合には有効であり、小さいサイズを確保/解放としては不向き。 2 は小さいサイズを確保/解放を効率よくするための方法。 3、4 も 2 とほぼ同じで小さいサイズの確保/解放で効率が良い。今となってはちょっと古い関数群。 Win 3.1(16ビット)時代のときは、グローバル関数とローカル関数と動作が違っていたようです。 今の 32 ビット時代では特に大きな違いはないようです。 3〜6 はプロセスのデフォルトヒープを使っているようです。 どれも良いこと、悪いこと特徴があるのです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.