В 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
Что касается физической памяти, то при наличии механизма виртуальных адресов у процессора, ее распределением заведует ОС. Выход за пределы возможен только в случае наличия ошибок в функциях выделения памяти ОС
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
для более наглядного представления проблемы опубликовал в sqlfiddle
Приложение работало (и на телефоне, и на эмуляторе), но после действий с регистрацией в приложении что-то пошло не такСамо приложение устанавливается...
Ввести строку с клавиатурыИз введенной строки выбрать все слова, начинающиеся на гласные буквы и заканчивающиеся на согласные