В C и C++ память адресуется побайтово. Если верить Стандарту, начало многобайтового объекта - это адрес его самого младшего байта. То есть - байта, который расположен ближе всех остальных байтов объекта к началу адресного пространства (к 0).
Мой вопрос заключается вот в чем:
Вопрос касается как виртуальной памяти, так и физической.
Например, такой объект:
uint8_t arr[1024];
Или такой:
uint8_t *arr = malloc(1024);
Может ли:
&arr[x] > &arr[y]
Вернуть true, при условии, что x < y?
uint_t arr[1024] теоретически может пересечь границу выделенного ОС блока памяти, тогда это будет называться переполнением стека (stackoverflow :).
Во втором случае, если в куче не хватит места malloc запросит память у ОС и та выделит очередной блок и метод либо вернет адрес блока, который гарантированно в адресном пространстве процесса, либо вернет NULL если памяти не хватает.
&arr[x] > &arr[y] - да, условие всегда истинно если x > y
Что касается физической памяти, то при наличии механизма виртуальных адресов у процессора, ее распределением заведует ОС. Выход за пределы возможен только в случае наличия ошибок в функциях выделения памяти ОС
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости