0


0

メモリが初期化されたかどうかを確認する

:: operator new(nbytes)を介してある程度の量のメモリを割り当て、後で「new(where)what」を使用して適切なタイプのobj(nbytes未満)のいくつかのオブジェクトを作成した場合、方法はありますか初期化されていないメモリがどこから始まるかを確認するには?

struct T{};
short noOfObj = 10;
T* p = static_cast(::operator new(sizeof(T) * noOfObj));
for (short i = 0; i < (noOfObj - 2); ++i)//here I'm constructing two less obj than available mem
{
new (p + i) T();
}

pが指す初期化されていないメモリが開始する場所をどのように確認できますか(noOfObjがどれだけ減少したか分からない)? (私は再び文法を台無しにしたように感じるが、私は今のところできる最善のことを恐れている)

2 Answer


5


唯一の方法は、「new」dに配置したオブジェクトのサイズを追跡し、未使用部分へのポインターを自分で維持することです。 システムがその情報を提供する方法はありません。


3


ワオ…​ わかりました、この質問を戦おうとしています…​

独自のメモリ管理を行うことに取り組んでいるようです…​ たとえば、プログラムの制御下で大きなメモリブロックを取得するために文字の巨大な配列を要求し、これを使用して独自の変数を初期化しますが、変数に何を与え、何がまだ空いているかを知りたい場合です。

割り当てたメモリと割り当てていないメモリを追跡しない限り、またはこのメモリプールに割り当てるすべてのオブジェクトを追跡しない限り、いいえ。 OSに関しては、chars(または使用する基本的なタイプ)の巨大なメモリブロックを提供します。