LINUX.ORG.RU

История изменений

Исправление Vic, (текущая версия) :

Описание того что я хочу

Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».

Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.

Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.

То, что кто-нибудь когда-нибудь пробовал так сделать – это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).

А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).

@MOPKOBKA, можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?

Исправление Vic, :

Описание того что я хочу

Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».

Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.

Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.

То, что кто-нибудь когда-нибудь пробовал так сделать - это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).

А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).

@MOPKOBKA, можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?

Исходная версия Vic, :

Описание того что я хочу

Если я правильно понял, хочется размещать структуру с полями переменной длины в монолитном куске памяти, в рантайме, со всроенным в компилятор этой «монолитной стркутуры».

Технически, такое сделать конечно можно. Навскидку, если делать в компиляторе, я бы к структурам из примера добавил описательную часть содержимого монолитного куска памяти (типа таблицу где какое поле находится), обращения к полям заменил бы на вызов какой-нибудь встроенной в компилятор функции или ее инлайн вариант, которая вернет адрес поля в соответствии с описанием, а код, производимый компилятором, работал бы не с константными смещениями, а с полученным адресом от встроенной функции компилятора. Таблица с описанием поможет и перестраивать такую структуру в рантайме при изменении размера полей.

Но именно такой реализации, что бы был именно монолитный кусок памяти, я ни в одном языке не встречал.

То, что кто-нибудь когда-нибудь пробовал так сделать - это сто процентов. Но, видимо, не прижилось, предположу, что из-за итоговой скорости работы программы. Обращения к полям структур, смещение которых вычислено на стадии компиляции программы, выполняется непосредственно самими командами процессора, что на намного быстрее (возможно на порядки), чем делать вычисления адреса поля структуры в рантайме (поглядите на свою же конструкцию по вычислению размера поля [ i->description.length ], а ведь примерно так же придется вычислять адрес потом при каждом обращении к содержимому такого поля).

А еще, такие косвенные вычисления очень плохо поддаются ускорению обработки (когда процессор просчитывает сразу несколько веток выполнения после условия и выбирает нужную ветку, когда условие становится решенным).

Можно поинтересоваться, зачем вам монолитная в памяти структура и почему не подошли обычные C++ классы плюс сериализация?