Почему параметры функции типа size_t? - PullRequest
5 голосов
/ 08 апреля 2010

Прототип memset - void *memset(void *s, int c, size_t n);. Так почему третий параметр имеет тип size_t? memset это просто пример, я хочу более общие причины. Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 08 апреля 2010

size_t является типом возврата оператора sizeof и используется для описания размеров памяти.В случае memset, он указывает количество байтов (n) в блоке (ах) памяти, которое должно быть установлено на заданное значение (c).варьируется в зависимости от адресного пространства целевой платформы.Это не всегда соответствует размеру регистра.Например, в архитектуре с сегментированной памятью sizeof (size_t) может быть меньше, чем sizeof (void *).Обычно size_t будет 4 байта на 32-битной машине, 8 байтов на 64-битной машине и т. Д.

2 голосов
/ 08 апреля 2010

size_t - это тип, используемый для обозначения размера объектов. В C размеры целочисленных типов (int, long и т. Д.) Зависят от реализации, и вам необходимо использовать правильный тип для каждой реализации компилятора p, чтобы размер был достаточно большим для хранения всех возможных значений.

Заголовки, которые будут поставляться с SDK платформы, будут иметь typedef, который сопоставит size_t с правильным целочисленным типом. Таким образом, вы пишете memset() один раз, и он компилируется прямо в каждой реализации.

1 голос
/ 08 апреля 2010

size_t - это тип, подходящий для представления объема памяти, который требуется объекту данных. Это целочисленный тип без знака (обычно это typedef unsigned int size_t;).

Прочитайте эту ссылку для получения дополнительной информации.

0 голосов
/ 08 апреля 2010

size_t гарантированно будет достаточно большим, чтобы содержать указатель на всех платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...