forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Потерянный std::align в GCC. (http://forum.boolean.name/showthread.php?t=19648)

Samodelkin 19.01.2015 18:11

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

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

Кто-нибудь сталкивался с подобными проблемами?

mr.DIMAS 19.01.2015 18:52

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

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

Samodelkin 19.01.2015 19:09

Ответ: Потерянный std::align в GCC.
 
Цитата:

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

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

Попробую это, хотя у меня немного другая механика, я выделяю не_выровненную память, а затем получаю указатель на ближайшую границу.
Но в общем то что мне использовать пока особой разницы нет.

Плохо что придется создавать два разных кода под разные ОС.
Так-то можно было бы напрямую страницы создавать через VirtualAlloc в WinAPI и аналогичные функции в линухе.

pozitiffcat 20.01.2015 14:26

Ответ: Потерянный std::align в GCC.
 
Не вникал в проблему но может подойдет?
Код:

#pragma pack(push, 1)
struct Foo
{
    // ...
};
#pragma pack(pop)


Samodelkin 20.01.2015 15:02

Ответ: Потерянный std::align в GCC.
 
Цитата:

Сообщение от pozitiffcat (Сообщение 292054)
Не вникал в проблему но может подойдет?
Код:

#pragma pack(push, 1)
struct Foo
{
    // ...
};
#pragma pack(pop)


Нет упаковка и выравнивание полей тут не подойдут.
Пока posix_memalloc'а будет достаточно, а затем лучше исправленного gcc подожду.
Или например в clang'е работает нормально.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot