厳密なエイリアシング規則についてかなり読んだ後でさえ、私はまだ混乱しています。私がこれを理解している限り、メモリは割り当てごとに異なる型を格納するために使用される可能性があるため、malloc は解放されたメモリを再利用できないため、これらの規則に従う適切なメモリ アロケータを実装することは不可能です。
明らかに、これは正しくありません。私は何が欠けていますか?厳密なエイリアシングに従うアロケータ (またはメモリ プール) をどのように実装しますか?
ありがとう。
編集:ばかげた簡単な例で私の質問を明確にしましょう:
// s == 0 frees the pool
void *my_custom_allocator(size_t s) {
static void *pool = malloc(1000);
static int in_use = FALSE;
if( in_use || s > 1000 ) return NULL;
if( s == 0 ) {
in_use = FALSE;
return NULL;
}
in_use = TRUE;
return pool;
}
main() {
int *i = my_custom_allocator(sizeof(int));
//use int
my_custom_allocator(0);
float *f = my_custom_allocator(sizeof(float)); //not allowed...
}