170 похожих чатов

Ребят, а массив фундаментальных типов (int/uint/bool etc) может как-то неочевидно

выравниваться в памяти?
Ну т.е. например int32_t[256] может по каким либо причинам занимать НЕ 1024 байта?
Интересуюсь по причине желания копировать подобные штуки memcpy, но не уверен насколько это будет переносимо.
Подчеркнусь - речь именно о фундаментальных типах.

15 ответов

17 просмотров

В конкретном приведённом примере - не может.

Зависит от ABI. Для x86_64 массив имеет выравнивание своего типа, если размер не превышает 16 байт. Если превышает то идет выравнивание на 16.

Может

Это будет абсолютно переносимо, только не ясно, при чем тут выравнивание?

ed braed
О, пасиба!

Да он тебе нагнал...

ed-braed Автор вопроса
Ilya Zviagin
Это будет абсолютно переносимо, только не ясно, пр...

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

ed braed
Ну я просто смело предположил что в каких-то случа...

С чего? Адресная Арифметика тогда перестанет работать

ed braed
Ну я просто смело предположил что в каких-то случа...

Адрес следующего элемента - это адрес предыдущего + sizeof элемента. ЭТО ЗАКОН

Evgeny Erokhin
Зависит от ABI. Для x86_64 массив имеет выравниван...

Тут товарищь видимо именно в виду выравнивание всего блока массива при выделении памяти динамически. И это вообще не выравнивание. А просто адрес

ed-braed Автор вопроса
Ilya Zviagin
Адрес следующего элемента - это адрес предыдущего ...

Хорошо. Да, это наверное действительно глупое предположение.

ed braed
Хорошо. Да, это наверное действительно глупое пре...

Если речь про оверхеды, то да массивы всегда кладутся последовательно, без паддингов. И полное выравнивание всего блока памяти по алпйнменту составляющего типа. Если создается на стеке или в шлобальном скоупе, и TLS туда же, то требования к выравниванию как я ранее писал. Про динпмическую - да тут выравнивание минимальное от разрядности зависит для 64битных, могу ошибаться но на 16 (Но да все элементы всегда последовательно). А вот паддинги, это уже в структурах и классах. Ну и при раскладке стекового фрейма, .bss, .data и т.д.

Мне казалось, что vector<bool> v(88); может занимать меньше, чем 88 байт, но это не точно

Pavel
Мне казалось, что vector<bool> v(88); может занима...

Речь не об этом. vector<bool> - пример "преждевременной оптимизации", баг, но автор о массивах спрашивал

Используй std::copy, для trivially copyable он и будет memcpy.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта