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

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

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

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

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

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

Кто-нибудь сталкивался с подобными проблемами?
__________________
Config1: Windows 10 x64 / Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1920x1080; Intel Core i7 930 @ 2.80GHz; DDR3 9GB Triple; AMD Radeon R9 290 4GB; SSD Ignition 2 120GB; HDD Seagate 1TB.
Config2: Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1366x768; Intel Pentium Dual-Core T4400 @ 2.20GHz; DDR2 2GB; NVIDIA GeForce G105M; HDD WD 250GB.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (19.01.2015)
Старый 19.01.2015, 15:52   #2
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,527 пользователей)
Ответ: Потерянный std::align в GCC.

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

http://man7.org/linux/man-pages/man3...emalign.3.html
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (19.01.2015)
Старый 19.01.2015, 16:09   #3
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Потерянный std::align в GCC.

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

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

Плохо что придется создавать два разных кода под разные ОС.
Так-то можно было бы напрямую страницы создавать через VirtualAlloc в WinAPI и аналогичные функции в линухе.
__________________
Config1: Windows 10 x64 / Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1920x1080; Intel Core i7 930 @ 2.80GHz; DDR3 9GB Triple; AMD Radeon R9 290 4GB; SSD Ignition 2 120GB; HDD Seagate 1TB.
Config2: Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1366x768; Intel Pentium Dual-Core T4400 @ 2.20GHz; DDR2 2GB; NVIDIA GeForce G105M; HDD WD 250GB.
(Offline)
 
Ответить с цитированием
Старый 20.01.2015, 11:26   #4
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Потерянный std::align в GCC.

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

Сообщение от pozitiffcat Посмотреть сообщение
Не вникал в проблему но может подойдет?
#pragma pack(push, 1)
struct Foo
{
    // ...
};
#pragma pack(pop)
Нет упаковка и выравнивание полей тут не подойдут.
Пока posix_memalloc'а будет достаточно, а затем лучше исправленного gcc подожду.
Или например в clang'е работает нормально.
__________________
Config1: Windows 10 x64 / Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1920x1080; Intel Core i7 930 @ 2.80GHz; DDR3 9GB Triple; AMD Radeon R9 290 4GB; SSD Ignition 2 120GB; HDD Seagate 1TB.
Config2: Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1366x768; Intel Pentium Dual-Core T4400 @ 2.20GHz; DDR2 2GB; NVIDIA GeForce G105M; HDD WD 250GB.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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