Соответствующий код:
typedef unsigned long int chunk_head;
typedef struct malloc_chunk
{
// Contains the size of the data in the chunk and the flag byte.
chunk_head head;
// Deliberately left unsized to allow overflow.
// Contains the payload of the chunk.
unsigned int data[];
};
И в качестве примера, макрос "get" выглядит так:
//Get the size of the data contained within the chunk.
#define GET_CHUNK_SIZE(chunk) ((chunk.head) & 0xFFFFFF)
Старший байт, который я использую для флагов - биты "inuse" и "могут быть объединены", и любые дополнительные, которые я найду, будут полезны.
Теперь, когда я закончил предоставлять справочную информацию, как я указал в заголовке, мне нужно иметь возможность изменить младшие 3 байта на размер блока. Мой первоначальный инстинкт был побитовый И заголовок с размером, так как он был бы правильно выровнен, но потом я понял, что он может также перезаписать байты флага, потому что он автоматически добавляет нули до тех пор, пока его размер не совпадет с длинным. Я даже не уверен, что вы можете поразрядно И int и long. В любом случае, помощь очень ценится.