Так уж получилось, что меня собеседовали компиляторщики, специалисты по C++. Вопросы по Java были достаточно примитивны, типа интернирование строк. Ещё надо было поведать про основную разницу C++ и Java - я вспомнил только про garbage collector. Не смог ответить, что такое полиморфизм и какие-то другие термины. То есть, я ООП понимаю и вовсю использую, но как называется каждый термин - забыл.
Про C++ я сразу сказал, что за стандартами не слежу и пишу всякое только в контексте нативных реализаций JDK. Меня спросили, как бы я реализовал выделение блока памяти с помощью
malloc
, чтобы для её освобождения не надо было бы передавать размер в метод free
. Я навскидку придумал пару способов, самым примитивным из которых оказалось хранение информации о выделенном блоке непосредственно перед ссылкой. А мне говорят, что оно так и реализовано. Да неужели?
Ты не поверишь :)
ОтветитьУдалитьОчень часто, при выделении памяти, выделяют блок, размером запрошенный + выравнивание если применимо + sizeof(size_t). В начало блока памяти пишут его длину, и возвращают указатель на начало блока + sizeof(size_t).
Я приблизительно так и предложил. Вот только про выравнивание не подумал.
Удалить