когда делает C++, выделяют/освобождают строковые литералы

Когда строковый литерал "привет" выделен и освобожден в течение времени жизни программы в этом примере?

init(char **s)
{ 
  *s = "hello";
}
int f()
{
  char *s = 0;
  init(&s);
  printf("%s\n", s);
  return 0;
}
6
задан Martin York 28 December 2009 в 19:49
поделиться

3 ответа

Компилятор инициализирует строковый литерал в сегмент памяти, доступный только для чтения. Во время исполнения не производится инициализация или удаление.

.
15
ответ дан 8 December 2019 в 12:20
поделиться

Они не выделяются, а хранятся в сегменте ДАННЫХ исполняемого файла.

3
ответ дан 8 December 2019 в 12:20
поделиться

Если предположить, что есть операционная система, то память, содержащая строковый литерал, выделяется при загрузке исполняемого файла и перераспределяется при выгрузке исполняемого файла. Именно тогда, когда это происходит, зависит от типа исполняемого файла (программа, разделяемая библиотека и т.д.) и от ОС.

.
1
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: