Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 19.01.2015, 18:11   #1
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 981
Написано 390 полезных сообщений
(для 634 пользователей)
Потерянный std::align в GCC.

В общем мне понадобилась данная штука.
А в gcc 4.8 её и нет.
Обновил до последнего 4.9.2, но там её тоже нет.
Хотя в доках gcc написано что уже давно есть (N2341).
В итоге выяснилось что функцию забыли реализовать и обещают что-то сделать только в gcc 5.0.

Что теперь мне делать?
Мне надо получить указатель на выровненный в 64 байта (кеш линия) участок памяти.
Память динамически выделяется и размер больше мегабайта, так что всякие выравнивания типов тут не подойдут.
Также хотелось бы обойтись возможностями стандарта, а не компилятора.

Кто-нибудь сталкивался с подобными проблемами?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (19.01.2015)
Старый 19.01.2015, 18:52   #2
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Потерянный std::align в GCC.

Я писал математику для своего сишного движка на SSE, поэтому нужно было выравнивание по 16. Использовал mingw, там есть _aligned_malloc
под линух есть posix_memalign

http://man7.org/linux/man-pages/man3...emalign.3.html
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (19.01.2015)
Старый 19.01.2015, 19:09   #3
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 981
Написано 390 полезных сообщений
(для 634 пользователей)
Ответ: Потерянный std::align в GCC.

Сообщение от mr.DIMAS Посмотреть сообщение
Я писал математику для своего сишного движка на SSE, поэтому нужно было выравнивание по 16. Использовал mingw, там есть _aligned_malloc
под линух есть posix_memalign

http://man7.org/linux/man-pages/man3...emalign.3.html
Попробую это, хотя у меня немного другая механика, я выделяю не_выровненную память, а затем получаю указатель на ближайшую границу.
Но в общем то что мне использовать пока особой разницы нет.

Плохо что придется создавать два разных кода под разные ОС.
Так-то можно было бы напрямую страницы создавать через VirtualAlloc в WinAPI и аналогичные функции в линухе.
(Offline)
 
Ответить с цитированием
Старый 20.01.2015, 14:26   #4
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Потерянный std::align в GCC.

Не вникал в проблему но может подойдет?
#pragma pack(push, 1)
struct Foo
{
    // ...
};
#pragma pack(pop)
(Offline)
 
Ответить с цитированием
Старый 20.01.2015, 15:02   #5
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 981
Написано 390 полезных сообщений
(для 634 пользователей)
Ответ: Потерянный std::align в GCC.

Сообщение от pozitiffcat Посмотреть сообщение
Не вникал в проблему но может подойдет?
#pragma pack(push, 1)
struct Foo
{
    // ...
};
#pragma pack(pop)
Нет упаковка и выравнивание полей тут не подойдут.
Пока posix_memalloc'а будет достаточно, а затем лучше исправленного gcc подожду.
Или например в clang'е работает нормально.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com