История изменений
Исправление KivApple, (текущая версия) :
На низком уровне это ничего не значит. В реальности в большинстве случаев const можно скастовать в не-const и делать с ним что-угодно. ОС, конечно, имеет механизмы защиты памяти, но они работают только на уровне страниц 4 КБ (то есть нельзя защитить от записи отдельные байты), а как секция данных, так и куча не имеют никакой защиты, только исполняемый код. К тому же, что ты передаёшь в качестве аргумента функции? Если это изначально не const, то он гарантированно будет в области памяти без защиты от записи. Менять права доступа к странице памяти при вызове const функции? Медленно и вызывает проблемы с многопоточностью.
Короче, в 99% случаев const существует исключительно для компилятора, чтобы выдавать ошибки компиляции (и, возможно, некоторые компиляторы могут на основе const делать какие-то оптимизации). В машинном коде от него ничего не остаётся и в рантайме ни на что не влияет. В 1% случаев const может таки на что-то влиять, но обычно это больше касается микроконтроллеров, где могут быть отдельные памяти для программ и для данных (при этом размер памяти для программ в разы превышает размер памяти для данных) и const задаёт куда положить объект в прошивке.
Исправление KivApple, :
На низком уровне это ничего не значит. В реальности в большинстве случаев const можно скастовать в не-const и делать с ним что-угодно. ОС, конечно, имеет механизмы защиты памяти, но они работают только на уровне страниц 4 КБ (то есть нельзя защитить от записи отдельные байты), а как секция данных, так и куча не имеют никакой защиты, только исполняемый код. К тому же, что ты передаёшь в качестве аргумента функции? Если это изначально не const, то он гарантированно будет в области памяти без защиты от записи. Менять права доступа к странице памяти при вызове const функции? Медленно и вызывает проблемы с многопоточностью.
Короче, в 99% случаев const существует исключительно для компилятора, чтобы выдавать ошибки компиляции (и, возможно, некоторые компиляторы могут на основе const делать какие-то оптимизации). В машинном коде от него ничего не остаётся и в рантайме ни на что не влияет. В 1% случаев const может таки на что-то влиять, но обычно это больше касается микроконтроллеров, где могут быть отдельные памяти для программ и для данных и const задаёт куда положить объект в прошивке.
Исправление KivApple, :
На низком уровне это ничего не значит. В реальности в большинстве случаев const можно скастовать в не-const и делать с ним что-угодно. ОС, конечно, имеет механизмы защиты памяти, но они работают только на уровне страниц 4 КБ (то есть нельзя защитить от записи отдельные байты), а как секция данных, так и куча не имеют никакой защиты, только исполняемый код. К тому же, что ты передаёшь в качестве аргумента функции? Если это изначально не const, то он гарантированно будет в области памяти без защиты от записи. Менять права доступа к странице памяти при вызове const функции? Медленно и вызывает проблемы с многопоточностью.
Короче, в 99% случаев const существует исключительно для компилятора, чтобы выдавать ошибки компиляции (и, возможно, некоторые компиляторы могут на основе const делать какие-то оптимизации). В машинном коде от него ничего не остаётся и в рантайме ни на что не влияет. В 1% случаев const может таки на что-то влиять, но обычно это больше касается микроконтроллеров.
Исходная версия KivApple, :
На низком уровне это ничего не значит. В реальности в большинстве случаев const можно скастовать в не-const и делать с ним что-угодно. ОС, конечно, имеет механизмы защиты памяти, но они работают только на уровне страниц 4 КБ (то есть нельзя защитить от записи отдельные байты), а как секция данных, так и куча не имеют никакой защиты, только исполняемый код. К тому же, что ты передаёшь в качестве аргумента функции? Если это изначально не const, то он гарантированно будет в области памяти без защиты от записи.
Короче, в 99% случаев const существует исключительно для компилятора, чтобы выдавать ошибки компиляции (и, возможно, некоторые компиляторы могут на основе const делать какие-то оптимизации). В машинном коде от него ничего не остаётся и в рантайме ни на что не влияет. В 1% случаев const может таки на что-то влиять, но обычно это больше касается микроконтроллеров.