Это зависит от того, что вы подразумеваете под «выделить»;ни один из этих методов не выполняет динамическое распределение на основе кучи в смысле malloc()
.
Если вы имеете в виду «сколько места зарезервировано в стеке», тогда ответ для второй строки вполне может быть8, но зависит от вашей платформы и компилятора .Компилятор может решить выровнять все переменные стека, например, по 16-байтовым границам.
Конечно, для хранения строкового литерала "warning"
потребуется, по крайней мере, 8 байтов статического программного пространства.инициализация str
.Компилятор может быть достаточно умным, чтобы определить, что вы используете один и тот же строковый литерал в нескольких местах, или это может быть не так.Опять же, это зависит .
Единственное, что не зависит от компилятора, это то, что sizeof(str)
всегда должно быть 8
.