История изменений
Исправление Vic, (текущая версия) :
Описание того что я хочу
Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».
Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.
Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.
То, что кто-нибудь когда-нибудь пробовал так сделать – это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).
А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).
MOPKOBKA, можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?
Исправление Vic, :
Описание того что я хочу
Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».
Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.
Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.
То, что кто-нибудь когда-нибудь пробовал так сделать - это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).
А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).
MOPKOBKA, можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?
Исходная версия Vic, :
Описание того что я хочу
Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».
Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.
Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.
То, что кто-нибудь когда-нибудь пробовал так сделать - это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).
А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).
Можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?