Ответ зависит от компилятора и текущего уровня оптимизации.
Быстрый эксперимент с этим кодом C ++
#include <cstring>
int strlen_of_const() {
return strlen("lorem ipsum");
}
on проводник компилятора показывает, что некоторые компиляторы оптимизируют вызов, в то время как другие компиляторы выполняют вызов во время выполнения. Например, gcc оптимизирует вызов:
strlen_of_const():
mov eax, 11
ret
MSVC, с другой стороны, сохраняет вызов:
$SG3533 DB 'lorem ipsum', 00H
EXTRN strlen:PROC
strlen_of_const PROC
sub rsp, 40 ; 00000028H
lea rcx, OFFSET FLAT:$SG3533
call strlen
add rsp, 40 ; 00000028H
ret 0
strlen_of_const ENDP