Описание тега alignas
NoneAlignas is an attribute introduced in C++11, which informs the compiler that the attributed object shall have a certain memory alignment. It replaces non-portable, compiler-specific alignment attributing, such as __declspec(align(16)).
1
ответ
alignas в структурах на 32-битных платформах
Я получаю неожиданные результаты при запуске следующего кода для 32-разрядного Linux x86 (флаги компилятора: g++ -std= C++14 -m32). Я попробовал GCC и Clang. #include <iostream> using namespace std; struct S1 { uint64_t a; uint32_t b; }; struc…
06 янв '16 в 13:27
3
ответа
Как указать указатель, который указывает на невыровненный int?
struct Intx4 { int data[4]; }; Intx4 loadIntx4(void const *p) { auto up alignas(1) = (int const *)p; // Does this line correct? (compiled ok in clang) Intx4 r; for (int i = 0; i < 4; i++) r.data[i] = up[i]; return r; } Я также попробовал следующе…
17 авг '15 в 12:46
4
ответа
Где я могу использовать alignas() в C++11?
Стремясь стандартизировать мой код и сделать его более переносимым, я заменил #ifdef __GNUC__ typedef __attribute__((aligned(16))) float aligned_block[4]; #else typedef __declspec(align(16)) float aligned_block[4]; #endif с typedef float alignas(16)…
03 апр '13 в 13:39
1
ответ
"natural_alignment_of" type_trait?
В C++11 у нас теперь есть alignas ключевое слово, которое можно использовать для определения нового типа, который является просто существующим типом, но с более строгим выравниванием, например, typedef: typedef char Maximally_Aligned_Char alignas( m…
06 дек '13 в 18:32
1
ответ
Спецификатор alignas: по типу / по данным элемента
Следующие два случая эквивалентны во всех ситуациях? 1) alignas по типу template <typename T, size_t N, size_t Alignment> struct alignas(Alignment) A { T data[N]; }; 2) alignas на массиве членов template <typename T, size_t N, size_t Alignm…
16 дек '16 в 18:32
0
ответов
Почему не компилируется alignas при использовании в статическом объявлении с clang?
У меня есть ошибка компиляции на Clang и предупреждение с GCC с этим кодом: static alignas(16) int one_s = 1; // clang: error: an attribute list cannot appear here; gcc: warning: attribute ignored; static __attribute__((aligned(16))) int zero_s = 0;…
09 мар '17 в 09:54
4
ответа
Обработка памяти, возвращаемой оператором new(sizeof(T) * N), как массива
В C можно выделить динамические массивы, используя malloc(sizeof(T) * N), а затем использовать арифметику указателей для получения элементов со смещением i в этом динамическом массиве. В C++ можно сделать то же самое, используя operator new() таким …
23 ноя '18 в 18:59
1
ответ
Как именно выравнивание влияет на макет памяти и поведение размещения новых?
Мы много читаем о выравнивании и как это важно, например, для размещения new использование, но мне было интересно - как это точно изменить расположение памяти? Очевидно, что если мы сделаем char buffer[10]; std::cout << sizeof buffer; а также …
24 янв '19 в 00:17
1
ответ
Как создать std::vector из char/std::byte, где первый байт выровнен до 16 байтов, но нет заполнения?
Существует существующий вопрос, который требует C++03 и не имеет ответа, поэтому я открою новый. Проблема в том, что я хочу иметь std::vector из std::byte, но чтобы .data()(первый элемент массива данных) выровнен по 16 байтам. alignas на обернутый с…
25 янв '19 в 12:09
1
ответ
Как использовать alignas для замены пакета Pragma?
Я пытаюсь понять, как использовать alignas, мне интересно, может ли это быть заменой прагматическому пакету, я очень старался это проверить, но безуспешно. Используя gcc 4.8.1 ( http://ideone.com/04mxpI), я всегда получаю 8 байт для STestAlignas ниж…
24 сен '13 в 09:40
1
ответ
Борьба с синтаксисом alignas
Я пытаюсь использовать alignas для указателей, которые являются членами класса, и, честно говоря, я не уверен, где я должен был поставить его. Например: class A { private: int n; alignas(64) double* ptr; public: A(const int num) : n(num), ptr(new do…
17 дек '14 в 20:36
1
ответ
Выравнивание памяти выше максимального выравнивания alignas malloc
Как можно было бы использовать malloc (или new, так как в большинстве реализаций new реализован с помощью malloc, не уверен, что стандарт говорит о выравнивании, а новое, кроме данных, должно быть выровнено с самым высоким скалярным выравниванием) с…
09 фев '17 в 15:55
2
ответа
Как std::alignas оптимизирует производительность программы?
В 32-битной машине один цикл чтения из памяти получает 4 bytes данных.Таким образом, для чтения ниже буфера, это должно занять 32 цикла чтения, чтобы прочитать буфер 128 bytes упомянуто ниже. char buffer[128]; Теперь, предположим, что если я выровня…
10 ноя '16 в 12:08
1
ответ
Проблема gcc alignas с указателями на объекты
Я использую gcc 4.9.2 и пытаюсь правильно выровнять статически инициализированные массивы для использования с AVX. Вот суть кода, который вызывает ошибки из-за проблем с выравниванием: #include <iostream> #include <cstddef> struct B { al…
08 апр '16 в 18:39
1
ответ
gcc выровнял новую поддержку (alignas)
У меня возникают трудности с поиском дополнительной информации о выровненном новом предупреждении GCC и опции gcc -faligned-new. Компиляция на gcc 7.2.0 (без --std= C++17) и попытка определить выровненную структуру, такую как: struct alignas(64) F…
19 мар '18 в 22:16
1
ответ
Нужно ли выравнивание в C++?
Я уверен, что я делаю. Матричная библиотека Eigen3, вероятно, намного быстрее, чем любая из моих собственных реализаций матриц благодаря выравниванию. Недавно я начал исследовать выравнивание с помощью C++. Я наткнулся на функции alignas и alignof и…
15 мар '18 в 12:28
2
ответа
Ключевое слово alignas не соблюдается
Я хочу перенастроить мой тип на границе кэша, поэтому я использовал alignas: struct alignas(64) W { }; Это хорошо компилируется. Но потом, к моему удивлению, когда я пытаюсь выделить кучу Ws, они не выровнены на 64 байта, но на самом деле выровнены …
12 фев '16 в 14:55
2
ответа
Ожидаемое первичное выражение перед `alignas(X)`?
Я хочу проверить использование alignas()поэтому я записываю этот код: #include <vector> using namespace std; template<typename X> void user(const vector<X>& vx) { constexpr int bufmax = 1024; alignas(X) buffer[bufmax]; const in…
15 мар '17 в 04:29
1
ответ
Используйте alignas для выравнивания структуры
В следующей структуре: struct alignas(?) test { int32_t f1; // 4 bytes int8_t f2; // 1 byte int8_t f3; // 1 byte }; Как пользоваться alignas чтобы sizeof(test) будет ровно 6 байт? alignas(1) не принимается компилятором (gcc, msvc, clang) (ошибка вро…
11 ноя '15 в 14:24
1
ответ
alignas(T) не разрешен в функции шаблона
При использовании Eclipse с MinGW(версия:4.8.1) для компиляции следующего фрагмента кода он может пройти, но Eclipse по-прежнему сообщает: "Несколько маркеров в этой строке - не удается разрешить тип 'alignas'" template<typename X> void set_as…
23 сен '13 в 10:03