LINUX.ORG.RU

Как заполнить буфер используя поля струтуры

 


0

2

В памяти создается пустой массив uint32_t для структуры:

struct Elf32_HashTable
{
  uint32_t nBuckets;
  uint32_t nChains;
  uint32_t bucket[nBuckets];
  uint32_t chain[nChains];
};

Размер массива вычисляется по формуле uint32_t sz = 2 + iNSymbols + iNSymbols/3 + iNSymbols%0x3;, где nBuckets = iNSymbols/3 + iNSymbols%0x3;.

Как можно заполнить поля bucket и chain без дополнительный указателей, причем заполняться будут в случайном порядке?

Можно заполнять через указатели pBucket = &buf[x], но хочется минимализма...


дык это не валидная структура, соответственно указателя на chain статически нету, соответственно указатель не «дополнительный», а bucket адресуется одинаково при любом размере

uint32_t bucket[100500]; //выделяем память под эту херь вручную, поэтому число не важно
//uint32_t chain[nChains]; //выделяем память под  эту херь вручную, поле без статического сдвига бесполезно
uint32_t* pchain() {return bucket + nBuckets;} //выделяем память под эту херь вручную, поэтому занимаемся адресной арифметикой

вообще, динамический размер подразумевает хранение указателей, так или иначе

anonymous
()

Что-то мне подсказывает, что nBuckets и nChains константы. Если нет, используй указатели или std::vector. Собственно, с вектором тебе самому эти размеры даже хранить не придётся, просто правильно проинициализируй вектор buckets, его метод size() вернёт nBuckets.

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)

Ну во-первых, работать это не будет, потому что массивы работают в компайл-тайме. Во-вторых, есть memcpy

xpahos ★★★★★
()
Ответ на: комментарий от anonymous

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

zanac1
() автор топика

Захотелось минимализма, увы хотелки невыполнимы. Всем спасибо.

zanac1
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.