Как правильно выравнивать структуры? - страница 2

 
Пообщался с чат-ботом Bard на эту тему. Вот его мнение:

Если в структуре будет еще использоваться переменные типа string , то их можно расположить в конце структуры, после незначащих байт. Это гарантирует, что переменные типа string будут выровнены на границу, кратную размеру типа string , даже если они не будут выровнены автоматически компилятором.

Например, следующий фрагмент кода выравнивает структуру MyStruct на границу, кратную 8 байтам, и размещает 3 переменные типа string в конце структуры:

struct MyStruct {
  int a;
  char b;
  int c;
  char pad[7]; // незначащие байты
  string s1;
  string s2;
  string s3;
};

Этот фрагмент кода гарантирует, что структура MyStruct будет выровнена на границу, кратную 8 байтам, и что переменные типа string будут выровнены на границу, кратную размеру типа string .

Если расположить переменные типа string в начале структуры, то они не будут выровнены на границу, кратную размеру типа string . Это может привести к тому, что процессору потребуется выполнить дополнительные операции для доступа к ним, что может снизить эффективность программы. Кроме того, данные в переменных типа string могут быть повреждены, что может привести к ошибкам в программе.

Если расположить переменные типа string вразнобой, то они также не будут выровнены на границу, кратную размеру типа string . Это может привести к тем же проблемам, что и в случае размещения переменных типа string в начале структуры.

Поэтому важно располагать переменные типа string в конце структуры, после незначащих байт. Это гарантирует, что переменные типа string будут выровнены на границу, кратную размеру типа string , и что к ним можно будет обращаться эффективно и надежно.

 
leon_17 #:
Пообщался с чат-ботом Bard на эту тему. Вот его мнение:

Не надо общаться с чат-ботами) Лучше суть вопроса изучи)

 
Koldun Zloy #:

Может хватит повторять этот бред?

Структура никогда не строка!

В реализации - строка. 

 
Алексей Тарабанов #:

В реализации - строка. 

Бессмысленное утверждение. Даже возразить нечего.

 
Koldun Zloy #:

Бессмысленное утверждение. Даже возразить нечего.

А вы зря возражаете. Если структуру написать в текстовом редакторе, или на листке бумаги карандашом, то это ничто иное как строка. Или даже несколько строк…

 
Alexey Viktorov #:

А вы зря возражаете. Если структуру написать в текстовом редакторе, или на листке бумаги карандашом, то это ничто иное как строка. Или даже несколько строк…

А если записать на перфоленту, то будут дырочки.

 
Alexey Viktorov #:

А вы зря возражаете. Если структуру написать в текстовом редакторе, или на листке бумаги карандашом, то это ничто иное как строка. Или даже несколько строк…

Тонкий троллинг )) Хорошо, когда у человека с утра отличное настроение.

 
Ihor Herasko #:

Тонкий троллинг )) Хорошо, когда у человека с утра отличное настроение.

Все есть строка)))

 
Valeriy Yastremskiy #:

Все есть строка)))

Все есть байты, а если копнуть немного поглубже - то и биты :)

 
Valeriy Yastremskiy #:

Все есть строка)))

Обычно так и делают, когда зареннее неизвестен тип данных. Значение записывается в строку, а вместе с этой строкой следует еще один параметр, указывающий, какого типа данные записаны. Такой подход, правда, влияет на производительность (впрочем незначительно), но претендует на универсальность.

Причина обращения: