История изменений
Исправление KivApple, (текущая версия) :
Она занимается самим менеджером памяти. Просто в одном и том же участке памяти по очереди хранятся то пользовательские данные (после malloc), то данные аллокатора памяти (после free). Противоречие разрешается тем, что при отдаче этого блока памяти пользователю структура данных аллокатора, которая там лежала, мгновенно становится ненужной (потому что мы не ведём учёт занятых блоков, только свободных), поэтому её можно отдать на перезапись пользователю, а значит она вполне себе свободная (т. е. может быть выделена malloc и использована пользователем, единственное ограничение - мы не можем выделять меньше размера этой структуры, иначе у free потом будет проблема куда записать свои данные). Соответственно, при free уже пользовательские данные перезаписываются аллокатором (поэтому пользовательскому коду не стоит полагаться на доступ к этой памяти после free - запись разрушит структуры данных аллокатора, а чтение вернёт мусор).
Исправление KivApple, :
Она занимается самим менеджером памяти. Просто в одном и том же участке памяти по очереди хранятся то пользовательские данные (после malloc), то данные аллокатора памяти (после free). Противоречие разрешается тем, что при отдаче этого блока памяти пользователю структура данных аллокатора, которая там лежала, мгновенно становится ненужной (потому что мы не ведём учёт занятых блоков, только свободных), поэтому её можно отдать на перезапись пользователю, а значит она вполне себе свободная (т. е. может быть выделена malloc и использована пользователем). Соответственно, при free уже пользовательские данные перезаписываются аллокатором (поэтому пользовательскому коду не стоит полагаться на доступ к этой памяти после free - запись разрушит структуры данных аллокатора, а чтение вернёт мусор).
Исправление KivApple, :
Она занимается самим менеджером памяти. Просто в одном и том же участке памяти по очереди хранятся то пользовательские данные (после malloc), то данные аллокатора памяти (после free). Противоречие разрешается тем, что при отдаче этого блока памяти пользователю структура данных аллокатора, которая там лежала, мгновенно становится ненужной, поэтому её можно отдать на перезапись пользователю, а значит она вполне себе свободная (т. е. может быть выделена malloc и использована пользователем). Соответственно, при free уже пользовательские данные перезаписываются аллокатором (поэтому пользовательскому коду не стоит полагаться на доступ к этой памяти после free - запись разрушит структуры данных аллокатора, а чтение вернёт мусор).
Исходная версия KivApple, :
Она занимается самим менеджером памяти. Просто в одном и том же участке памяти по очереди хранятся то пользовательские данные (после malloc), то данные аллокатора памяти (после free). Противоречие разрешается тем, что при отдаче этого блока памяти пользователю структура данных аллокатора, которая там лежала, мгновенно становится ненужной, поэтому её можно отдать на перезапись пользователю, а значит она вполне себе свободная (т. е. может быть выделена malloc).