Вы спрашивали о двух вещах, которые обычно O (1).Первый более сложен, чем последний, поэтому я буду обращаться к ним в обратном порядке.
Индексирование массива
Напомним, что «RAM» означает «Память с произвольным доступом»,Это означает, что (кроме эффектов кэширования) доступ к одной части оперативной памяти будет таким же быстрым, как и к любой другой.Это «перемещение» n, на которое вы ссылаетесь, просто не происходит;Схема оперативной памяти спроектирована таким образом, что независимо от того, какие вы установили адресные контакты, будут на выходных контактах следующего цикла.
Распределение памяти
Это осложняется тем фактом, чточто есть распределитель, который делает кучу работы за кулисами.В Википедии содержится огромное количество информации, но в общем (но некрасивом) смысле ответ здесь «O (1), за исключением случаев, когда это не так».
Даже если массив гарантированно был заполнен нулями, вы все равно могли видеть O (1), поскольку многие платформы отображают память, которая уже была заполнена нулями в вашем процессе.Если вам действительно интересно, вы можете взглянуть на реализацию calloc
(заполнение нулями) в Malloc Дуга Ли.Конечно, чтобы понять, что происходит ниже, вам понадобится еще одна книга или вам нужно поискать источник ядра .