ええそれはそうです。
delete
new
他の情報とともに、そのサイズを含む追加情報をチャンクに追加するため (通常は領域がユーザーに返される前)、メモリ チャンクのサイズを認識します。これはすべて実装固有のものであり、コードでは使用しないでください。
最後の質問に答えるには:いいえ-使用できません-プラットフォームとコンパイラに大きく依存する実装の詳細です。
たとえば、K&R2 で示されたサンプル メモリ アロケータでは、これは割り当てられた各チャンクの前に配置された「ヘッダー」です。
typedef long Align; /* for alignment to long boundary */
union header { /* block header */
struct {
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
} s;
Align x; /* force alignment of blocks */
};
typedef union header Header;
size
は、割り当てられたブロックのサイズです (その後free
、 またはによって使用されdelete
ます)。