В большинстве современных операционных систем используется модель с плоской памятью , что означает, что указатель может представлять любой адрес в виртуальном адресном пространстве.
В 64-разрядных системах указатели 64-разрядные, в 32-разрядных системах они являются 32-разрядными.
В 32-разрядных операционных системах виртуальное адресное пространство каждого процесса составляет 2 ^ 32 байта, что составляет несколько миллиардов байт (т.е. несколько гигабайт).
В 64-разрядных операционных системах виртуальное адресное пространство каждого процесса составляет 2 ^ 64 байта, что является астрономически большим числом.
Итак что произойдет, если я попытаюсь получить доступ к * (массив + i), где я больше максимального [указателя]?
С системами с плоской моделью памяти вы никогда не столкнетесь с такой ситуацией, поскольку указатель всегда достаточно велик, чтобы представлять любой адрес в виртуальном адресном пространстве процесса.
Теоретически возможно, что вы столкнетесь с такой ситуацией в системе с модулем сегментированной памяти эль . Однако это определенно не та причина, по которой у вас возникла описанная вами проблема.
Как я понимаю, указатели всегда целочисленные, поэтому последняя запись массива, к которой я могу получить доступ, будет максимальным целочисленным значением эта спецификация c system.
Последний элемент массива, к которому вы можете легально обращаться, зависит от того, сколько памяти вы выделили для массива.