Когда функция будет загружена в память? - PullRequest
3 голосов
/ 19 сентября 2019

Например, у меня есть функция:

void getA(char* outA) {
  char a[10000];
  // copy a to outA
}

Затем я компилирую getA в общую библиотеку.и связать с исполняемым файлом.

Я понимаю, что переменная a остается в памяти стека при вызове getA.

Когда функция getA будет загружена в память?

  • когда запуск исполняемого файла?
  • когда будет вызван getA?

Где будет размещен контекст функции?

Что, если он статически связан, будет по-другому?

1 Ответ

6 голосов
/ 19 сентября 2019

Стандарт C не касается загрузки кода.Нужно просто сказать, как должна вести себя программа при запуске.

На практике в современных операционных системах существует множество возможностей:

  • она загружается в память при запуске исполняемого файла
  • загружается в память при вызове
  • загружается в память где-то между этими двумя точками
  • загружается в память до запуск исполняемого файла

Единственная разница между этими случаями заключается в незначительных различиях во времени выполнения программы.Вам, как разработчику, в большинстве случаев даже не нужно знать!

Если вы запускаете исполняемый файл со съемного устройства, то не рекомендуется отключать устройство от сети, прежде чем спрашивать операционную систему, в порядке ли оно, каквозможно, он не загрузил весь программный код в память!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...