Обычно это было бы, если В пункте не покроет слишком много таблицы, и затем это сделает сканирование таблицы. Лучший способ узнать в Вашем конкретном случае состоял бы в том, чтобы выполнить его в запросе анализатор и проверить план выполнения.
Из Википедия
Заголовочные файлы
stdlib.h
иstddef.h
определяют тип данных с именемsize_t
1 , который используется для представления размера объекта. Библиотечные функции, которые принимают размеры, ожидают, что они будут иметь типsize_t
, а оператор sizeof оценивается какsize_t
.Фактический тип
size_t
- это платформа. зависимый; распространенной ошибкой является предположение, чтоsize_t
совпадает с unsigned int, что может привести к ошибкам программирования, 2 , особенно по мере того, как 64-битные архитектуры становятся все более распространенными.
Следующие типы и макросы определены в стандартном заголовке
stddef.h
size_t
, который представляет собой целочисленный тип без знака результата оператора sizeof
size_t
- это целочисленный тип без знака результата sizeof оператор (ISO C99, раздел 7.17.)
Оператор sizeof
возвращает размер (в байтах) его операнда, который может быть
выражение или имя типа в скобках. Размер определяется от типа
операнд. Результат - целое число. Значение результата определяется реализацией, и
его тип (беззнаковый целочисленный тип) - size_t
(ISO C99, раздел 6.5.3.4.)
Фактически size_t
представляет количество байтов, которые вы можете адресовать. На большинстве современных архитектур за последние 10-15 лет это было 32 бита, что также было размером беззнакового int. Однако мы переходим к 64-битной адресации, в то время как uint
, скорее всего, останется 32-битным (его размер не гарантируется стандартом C ++). Чтобы ваш код, зависящий от объема памяти, переносился между архитектурами, вы должны использовать size_t
. Например, такие вещи, как размеры массивов, всегда должны использовать size_t
. Если вы посмотрите на стандартные контейнеры, то :: size ()
всегда возвращает size_t
.
Также обратите внимание, что в Visual Studio есть опция компиляции, которая может проверять эти типы ошибок называется "
Таким образом, вы всегда знаете, какой размер, потому что для размеров предназначен определенный тип. Собственный вопрос показывает, что это может быть проблемой: это int
или unsigned int
? Кроме того, какова величина ( short
, int
, long
и т. Д.)?
Поскольку назначен определенный тип, вы не можете нужно беспокоиться о длине или подписи.
Фактическое определение можно найти в Справочной библиотеке C ++ , в которой говорится:
Тип:
size_t
(Unsigned интегральный тип)Заголовок:
size_t
соответствует интегральному типу данных, возвращаемому оператором языкаsizeof
, и определен в
size_t должен быть определен в заголовках вашей стандартной библиотеки. По моему опыту, обычно это просто typedef для unsigned int. Но дело в том, что это не обязательно. Такие типы, как size_t, позволяют поставщику стандартной библиотеки свободно изменять свои базовые типы данных, если это подходит для платформы. Если вы предполагаете, что size_t всегда беззнаковое int (через приведение и т.д.), вы можете столкнуться с проблемами в будущем, если ваш поставщик изменит size_t, например, на 64-битный тип. По этой причине опасно предполагать что-либо об этом или любом другом типе библиотеки.
Я не знаком с void_t
, за исключением результатов поиска Google (он используется в библиотеке vmalloc
от Kiem- Фонг Во из AT&T Research - я уверен, что он используется и в других библиотеках).
Различные определения типов xxx_t используются для абстрагирования типа от конкретной конкретной реализации, поскольку конкретные типы, используемые для определенных вещей, могут отличаются от одной платформы к другой. Например:
Void_t
абстрагирует тип указателя, возвращаемого подпрограммами библиотеки vmalloc
, потому что он был написан для работы в системах, предшествующих ANSI / ISO C, где ключевое слово void
может не существовать. По крайней мере, я так думаю. wchar_t
абстрагирует тип, используемый для широких символов, поскольку в некоторых системах это будет 16-битный тип, в других - 32-битный тип. Итак, если вы пишете свой код обработки широких символов, чтобы использовать тип wchar_t
вместо, скажем, unsigned short
, этот код, вероятно, будет более переносимым на различные платформы.