В самом конце книги Кернигана и Ритчи Язык программирования C описывается распределитель памяти. Это говорит
Каждый блок содержит размер, указатель на следующий блок и само пространство.
Но я не вижу этого в коде:
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;
Указатель на следующий блок — *ptr
, а размер — unsigned size
, но какой переменной является само пространство? Является ли само пространство переменной x
?
ptr
плюс размерsize
будет больше, чемx
. Исправление выравнивания отсутствует, и весь сегмент, скорее всего, будет содержать байты заполнения. Все, что делает этот код, — это бессмысленно запутывает вещи. Только не читайте эту чушь, 30 лет спустя это бредовый код. - person Lundin   schedule 15.09.2015