Если вы знаете верхнюю границу хранилища и она не обременительна, обычно лучше просто создать массив фиксированного размера.
Как вы заявили, поддержка массивов переменной длины в некоторых реализациях не совсем корректна, а в других - полностью недоступна. И malloc
поставляется с дополнительными накладными расходами и включает в себя возможность его сбоя.
Я бы выбрал массив фиксированной длины не переменной длины (я думаю, что static
- это вводящий в заблуждение термин, используемый здесь).
Теперь вопрос о том, используете ли вы символьный массив, где каждое значение указывает, является ли эквивалентный бит плохим, или целочисленный массив, где каждый элемент представляет собой последовательный список плохих бит, является другим вопросом.
Для начала я бы попытался минимизировать данные во втором случае использования, используя 16-битное значение - будь то short
или int
в вашей реализации, я не знаю.
Но поскольку у вас 320 бит, 8-битный символ не будет работать для битовой позиции, поэтому необходимо 16-битное значение.
Следовательно, для этого второго случая вам нужно будет использовать 640 байт, а не 320, для наихудшего случая, когда каждый бит в выборке плохой. Вы можете обойтись без необходимости подсчета ошибочных битов, сохранив значения -1 в неиспользуемых слотах этого массива.
Таким образом, на самом деле возможны варианты (например, для битовых позиций 42 и 314):
BytePos BadBitFlag or: BytePos BadBitPosition
0..41 0 0/1 42
42 1 2/3 314
43..313 0 4/5 -1
314 1 :
315..319 0 638/9 -1
Это действительно зависит от ограничений хранилища.
Вы должны вычислять данные независимо от того, какой метод вы выберете, поскольку вы выбираете "биты" на основе символов в первом решении, то есть результат XOR необходимо будет расширить из массива битов в 40 байтов в байтовый массив в 320 байтов.
Если вы собираетесь много обрабатывать список плохих битов и можете сэкономить дополнительное хранилище, я бы выбрал второе решение.
Если вы собираетесь обрабатывать список только несколько раз или у вас очень мало памяти, выберите первое решение.