У меня есть блок памяти с элементами фиксированного размера, скажем, 100 байт, помещенный в него один за другим, все с одинаковой фиксированной длиной, поэтому память выглядит так:
<element1(100 bytes)><element2(100 bytes)><element3(100 bytes)>...
В некоторых ситуациях мне нужно определить, установлены ли все байты определенного элемента в 0-байты, потому что это имеет особое значение (я не сказал, что это хорошая идея, но такова ситуация, в которой я нахожусь).
Вопрос в том, как мне это сделать эффективно. Далее: есть ли простая функция для этого. Для установки байтов в ноль я могу использовать memset или bzero, но я не знаю никакой функции для проверки нуля.
В настоящий момент я использую цикл для проверки
char *elementStart = memoryBlock + elementNr*fixedElementSize;
bool special = true;
for ( size_t curByteNr=0; curByteNr<fixedElementSize; ++curByteNr )
{
special &= (*(elementStart+curByteNr)) == 0;
}
Конечно, я мог бы зацикливаться с большим смещением и проверять сразу несколько байтов с помощью mword или другого подходящего большего размера. И я думаю, это было бы довольно эффективно, но я хотел бы знать, есть ли функция, чтобы взять на себя это бремя от меня.
Предлагаемые функции:
- ! memcmp (compareBlock, myBlock, fixedElementSize)