[*] Возможно, возвращаемый адрес является произвольным и может иметь какое -либо значение. (Я не думаю, что это правильно.) < /Li>
Что -то еще? < /Li>
< /ul>
Причина задания этого вопроса Я хочу знать, смогу ли я безопасно переосмыслить байты, содержащиеся в этом блоке памяти, как другие типы, например, float , Double , uint64_t и т. Д.
Идя в другую сторону, ситуация более очевидна. (Я думаю - поправьте меня.)
Например, если бы мы попросили std :: vector , то указатель, возвращаемый распределением памяти , и удерживается объектом std :: ecect , будет выровнен 8 байтов. br />
Код: Выделить всё
char*
- Правильно выровнен (4-байтовый выровнен) float
- Правильно выровнен (8-байт) двойной
- Правильно выровнен (2-байт) без знака Short int
- ... и т. Д.
< /ul>
Однако, если выделение для std :: vector может вернуть адрес памяти 1025 (десятичный), то это явно не гарантированно Правильно выровнен при любом смещении, если повторно интерпретируется как любой тип шириной, чем 1 байт. Знайте в комментариях, если что -то из этого не вполне имеет смысл или правильно сочетается. > Возможно, я нашел ответ на это, но я не уверен, как интерпретировать то, что я прочитал. < /P>
from: < /p> - https://en.cppreference.com/w/cpp/memor ... erator_new
Но что это означает? /> Для объекта ширины 1 байта это, по -видимому, предполагает, что любое адресное значение является приемлемым. приемлемо. Насколько мне известно, нет инструкций по загрузке 3 -байтового значения из памяти в x86. Что произойдет, если вы запросите новый [t] , где t является 3 -байтовой шириной struct ?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ort-does-i