Существует также проблема, связанная с тем, что size_t
может представлять стихи, которые ваша платформа позволит на самом деле решать процессу.
Даже с виртуальной памятью на 64-битной платформе вы вряд ли сможете звонить memcpy()
с размерами, превышающими несколько ТБ или около того, и даже тогда, это довольно горячая машина ... Трудно представить, на что была бы похожа машина, на которой можно было бы установить полностью покрытое 64-битное адресное пространство.
Не берите в голову встроенные системы, имеющие всего несколько КБ общей доступной для записи памяти, где не имеет смысла пытаться memcpy()
получить больше информации, чем ОЗУ, независимо от определения size_t
. Подумайте о том, что только что произошло со стеком, содержащим адрес возврата этого вызова, если вы это сделали?
Или системы, в которых виртуальное адресное пространство, видимое процессом, меньше установленной физической памяти. Это на самом деле имеет место, например, с процессом Win32, работающим на платформе Win64. (Впервые я столкнулся с этим во время совместного использования ОС TSX-11, работающей на PDP-11 с 4 МБ физической памяти и виртуальным адресом 64 КБ в каждом процессе. Тогда 4 МБ ОЗУ было много памяти, а IBM IBM не существует еще.)