Запитання з тегом «memory-alignment»

8
Мета вирівнювання пам'яті
Звичайно, я не розумію. Скажіть, у вас є пам'ять зі словом пам'яті довжиною 1 байт. Чому ви не можете отримати доступ до 4-байтної змінної в одному доступі до пам’яті по нерівневій адресі (тобто не ділиться на 4), як це стосується вирівняних адрес?

16
Привабливі приклади користувацьких C ++-розподільників?
Які існують справді вагомі причини, щоб піти std::allocatorна користь користувацького рішення? Чи стикалися ви з будь-якими ситуаціями, коли це було абсолютно необхідне для коректності, продуктивності, масштабованості тощо? Будь-які справді розумні приклади? Спеціальні розподільники завжди були особливістю Стандартної бібліотеки, в якій я не мав особливої ​​потреби. Мені було просто цікаво, чи …

4
Чому вирівнювання структури залежить від того, тип поля є примітивним або визначеним користувачем?
У Noda Time v2 ми переходимо до наносекундної роздільної здатності. Це означає, що ми більше не можемо використовувати 8-байтове ціле число для представлення всього діапазону часу, який нас цікавить. Це спонукало мене дослідити використання пам'яті (багатьох) структур Noda Time, що в свою чергу призвело мене виявити незначну диваку у рішенні …

4
Чи вирівнюються змінні стеку за допомогою __attribute __ ((вирівняні (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]); } І я маю такий результат: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac Чому адреса a[0]не кратна 0x1000? Що саме __attribute__((aligned(x)))робить? Я неправильно зрозумів це пояснення? Я …

4
Вирівнювання пам'яті: як використовувати alignof / alignas?
Зараз я працюю із спільною пам’яттю. Я не можу зрозуміти alignofі alignas. cppreference незрозумілий: alignofповертає "вирівнювання", але що таке "вирівнювання"? кількість байт для додавання для наступного вирівняного блоку? м'який розмір? Записи переповнення стека / блоги теж незрозумілі. Хтось може пояснити чітко alignofі alignas?

2
Чому адреси argc та argv 12 байтів один від одного?
Я запустив наступну програму на своєму комп’ютері (64-розрядний Intel, що працює під управлінням Linux). #include <stdio.h> void test(int argc, char **argv) { printf("[test] Argc Pointer: %p\n", &argc); printf("[test] Argv Pointer: %p\n", &argv); } int main(int argc, char **argv) { printf("Argc Pointer: %p\n", &argc); printf("Argv Pointer: %p\n", &argv); printf("Size of &argc: …

1
Сучасний підхід до створення std :: вектор виділяє вирівняну пам'ять
Наступне питання пов'язане, однак відповіді на старі, і коментар від користувача Marc Glisse передбачає , що є нові підходи , починаючи з C ++ 17 до вирішення цієї проблеми , які не можуть бути адекватно обговорені. Я намагаюся вирівняти пам'ять, що працює належним чином для SIMD, але все ще маю …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.