Очень полезное начинание. Чуток позжее я и к тебе сюда допишу пару примеров и несколько твоих "стибрю" и размещу у себя параллельным постом, ежели ты не против, ок?
пользуясь случаем хотелось бы обратить ваше, Хеник, уважаемое внимание на тот факт, что в ведомом Вами коммьюнити rabota_il (в юзеринфо то есть и в ключевых постах) нет линка на коммьюнити hitech_tests.
О методе вообще. Предположительно, spmalloc возвращает блок, годный по выравниванию для всех типов. Если (как обычно происходит) double выравнивается по границе 8 байт, а int по границе 4 байт, обращение к выделенной памяти через указатель на double приводит к ошибке выравнивания. (А если на 80х86 она не фатальна и сходит с рук, так я не виноват.) Нужно выделить в начале блока столько места, чтобы возвращаемое значение опять подходило для всех типов. На C это довольно просто, нужно создать union всех примитивных типов и возвращать следующий за ним указатель.
Сделать такую функцию для C++ абсолютно переносимой невозможно. Например, классы с конструкторами вполне имеют право требовать какого-нибудь экзотического выравнивания, а их включать в union нельзя.
Практически же достаточно взять union трёх типов: int, double и long double.
Понятно что преобразуешие функция также являются машинно-зависимыми, это вполне естественной для тех, кто знает структуру адресации в разных машинах...
Но на интервью я бы например об этом даже не заикнулся... Так как не этого ждут... а ждут то - что хотят услышать...
Comments 24
Reply
скоро к томуже будет вторая часть :)
Reply
Reply
Reply
Reply
Reply
Reply
Reply
Reply
Reply
Reply
Сделать такую функцию для C++ абсолютно переносимой невозможно. Например, классы с конструкторами вполне имеют право требовать какого-нибудь экзотического выравнивания, а их включать в union нельзя.
Практически же достаточно взять union трёх типов: int, double и long double.
Reply
Понятно что преобразуешие функция также являются машинно-зависимыми, это вполне естественной для тех, кто знает структуру адресации в разных машинах...
Но на интервью я бы например об этом даже не заикнулся...
Так как не этого ждут... а ждут то - что хотят услышать...
Reply
Reply
универсальное решение через переменную "на стеке"...
Reply
Reply
Leave a comment