Вопросы по теме 'memory-alignment'

Всегда ли члены класса/структуры создаются в памяти в том порядке, в котором они были объявлены?
Это вопрос, возникший в результате ответа Роба Уокера здесь . Предположим, я объявляю класс/структуру следующим образом: struct { char A; int B; char C; int D; }; Можно ли предположить, что эти члены будут объявлены именно...
13013 просмотров
schedule 20.11.2022

Почему Mac ABI требует выравнивания стека по 16 байт для x86-32?
Я могу понять это требование для старых систем PPC RISC и даже для x86-64, но для старого проверенного x86? В этом случае стек необходимо выровнять только по 4-байтовым границам. Да, некоторые инструкции MMX / SSE требуют 16-байтового выравнивания,...
7236 просмотров

Убедительные примеры пользовательских распределителей C++?
Каковы действительно веские причины отказаться от std::allocator в пользу индивидуального решения? Сталкивались ли вы с ситуациями, когда это было абсолютно необходимо для корректности, производительности, масштабируемости и т. д.? Есть...
102957 просмотров

Выровнены ли переменные стека GCC __attribute__((aligned(x)))?
у меня есть следующий код: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } И у меня есть...
78018 просмотров
schedule 06.02.2023

Почему структура, состоящая из char, short и char (именно в таком порядке), при компиляции на C++ с включенной 4-байтовой упаковкой превращается в 6-байтовую структуру?
Я думал, что понял, как C/C++ обрабатывает выравнивание элементов структуры. Но я получаю странные результаты для определенного расположения в Visual Studio 2008 и 2010. В частности, я обнаружил, что структура, состоящая из char, short и char,...
1434 просмотров

объединение упакованных данных с выровненным доступом к памяти
Я пытаюсь выполнить оптимизацию памяти, которая должна быть теоретически возможной, но я начинаю сомневаться, что она находится в пределах возможностей arm-elf-gcc. Пожалуйста, покажи мне, что я ошибаюсь. У меня есть встроенная система с очень...
2705 просмотров

Проблема неявного выравнивания GCC. (64-битный код)
Как я могу явно отключить выравнивание определенной переменной в gcc? Возьмите этот код: typedef struct{ unsigned long long offset; unsigned long long size; unsigned long type; unsigned long acpi; }memstruct; memstruct *memstrx; Это...
4142 просмотров
schedule 20.03.2024

Выделение памяти Win32 с большим выравниванием
Мне нужно выделить большие области памяти (мегабайты) с большими выравниваниями (также потенциально в диапазоне мегабайт). Семейство функций VirtualAlloc, похоже, не предоставляет возможностей для этого. Что я делаю в Linux, чтобы достичь этого,...
1463 просмотров

Выравнивание структуры данных для реализации сериализации в C ++
Я понимаю теорию выравнивания структур данных и использую эту теорию для реализации сериализации. Однако мне трудно начать работу с настоящим кодом. Может ли кто-нибудь дать мне простой пример, чтобы показать, как это работает? Скажем так:...
905 просмотров
schedule 21.04.2022

Двойное выравнивание
После обсуждения в этой публикации я понял, что основная причина согласования члены структуры - это производительность (и некоторые ограничения архитектуры). Если мы исследуем Microsoft (Visual C ++), Borland / CodeGear (C ++ - Builder), Digital...
9094 просмотров
schedule 08.10.2023

Выравнивание 16 не соблюдается при использовании автоматического ключевого слова?
При компиляции с VS2012 и работе с библиотекой DirectXMath я столкнулся с проблемой, из-за которой оказалось, что компилятор не выравнивает мою XMMATRIX. Я упростил задачу до следующего. #include <DirectXMath.h> using namespace DirectX;...
1140 просмотров

Каков фактический эффект успешного невыровненного доступа на x86?
Я всегда слышу, что невыровненный доступ - это плохо, потому что он либо вызовет ошибки времени выполнения и приведет к сбою программы, либо замедлит доступ к памяти. Однако я не могу найти реальных данных о том, насколько они замедлят работу....
9463 просмотров

Спецификатор alignas работает с "новым"?
Мой вопрос довольно простой; Спецификатор alignas работает с "новым"? То есть, если структура определена для выравнивания, будет ли она выровнена при выделении с помощью new?
6075 просмотров
schedule 01.06.2022

GCC считает указатели int невыровненными на ARM
У меня есть следующая тестовая программа: #include <string.h> int q(int *p) { int x; memcpy(&x,p,sizeof(int)); x+=12; memcpy(p,&x,sizeof(int)); return p[0]; } Когда я компилирую это с помощью GCC 4.7.2 для...
3998 просмотров
schedule 17.05.2022

Предупреждение C4121: поведение и выравнивание структуры (Visual Studio 2010)
Рассмотрим ниже объявление. (Visual Studio 2010, уровень предупреждения 4) #pragma pack(push, 2) #define PADDING 1 // --- <case 1> /* #define PADDING 2 // --- <case 2> */ struct foo { char a[PADDING]; int b; }; Симптом...
1449 просмотров

указывает на неинициализированные байты. Ошибки Valgrind
Я использовал Valgrind для поиска утечек памяти в моем коде, и, хотя утечек памяти не обнаружено, сообщается о некоторых ошибках, все они возникают в одном методе функции/класса: ==17043== ERROR SUMMARY: 10100 errors from 3 contexts (suppressed:...
12933 просмотров
schedule 17.05.2022

Возможно ли, чтобы тип имел требования к выравниванию, отличные от «выравнивания по n байтам»
Например, рассмотрим следующее: Предположим, что int выровнен по 4 байтам, а long — по 8 байтам. struct example { int a; long b; int c; }; очевидным способом для компилятора разместить это в памяти было бы:...
217 просмотров
schedule 04.05.2023

Каков рекомендуемый способ выравнивания памяти в С++ 11?
Я работаю над реализацией кольцевого буфера с одним производителем и одним потребителем. У меня есть два требования: Выровняйте один экземпляр кольцевого буфера, выделенный в куче, по строке кэша. Выровняйте поле в кольцевом буфере по строке...
34292 просмотров

Выравнивание dtype таблицы Pytables
Если я создам следующий выровненный массив Numpy import numpy as np import tables as pt numrows = 10 dt = np.dtype([('date', [('year', '<i4'), ('month', '<i4'), ('day', '<i4')]), ('apples', '<f8'),...
255 просмотров
schedule 23.12.2022

выравнивание памяти в структуру - размер выравнивания равен наибольшему размеру члена
Я хотел бы знать, почему мы должны принять в качестве размера выравнивания структуры размер выравнивания, равный наибольшему размеру члена в структуре. Пример : struct MixedData { char Data1; short Data2; int Data3; char Data4;...
300 просмотров
schedule 28.07.2022