выравнивание
Mar. 18th, 2015 05:21 amА почему у нас нет (псевдо-)функции для чтения невыровненной памяти? Или, еще лучше, типа "невыровненный указатель"? Ну, понятно, что на Интеле в нормальной ситуации можно и так читать что попало по любому указателю. Но ради более тупых машин приходится портабельно делать через memcpy() где угодно. А так компилятор бы везде сам прочухал. И мог бы генерить код типа
И это при том, что на ARM, оказывается, уже есть такой тип указателей, __packed *. Гм, пойти что-ли написать темплейт по образцу выше.
TYPE result;
if (ptr & ALIGNMASK) {
memcpy(&result, ptr, sizeof(TYPE));
} else {
result = *ptr;
}
И это при том, что на ARM, оказывается, уже есть такой тип указателей, __packed *. Гм, пойти что-ли написать темплейт по образцу выше.
no subject
Date: 2015-03-18 05:14 pm (UTC)я в студии когда-то удивился что она использует автоматом memcpy_sse если указатель выровнен по 64-м битам, а в макоси 64 вообще нельзя ничего выделить с адресом не кратным 8-ке
я понимаю что это другое, но тривиальная штука же. может вендора проца/компилятора попинать надо? они любят кастомные версии гцц запиливать
no subject
Date: 2015-03-18 07:09 pm (UTC)no subject
Date: 2015-03-20 01:26 pm (UTC)no subject
Date: 2015-03-20 02:48 pm (UTC)