Я думал об этом уже несколько дней: когда я компилирую функцию в машинный код, это просто отдельная часть всей базы кода. Когда я вызываю функцию, параметры копируются, и указатель инструкции процесса переходит в начало функции. Это правильно?
Если так, я не понимаю, как функции могут быть поточно-ориентированными, если они не используют глобальные данные. Допустим, два потока одновременно вызывают одну и ту же функцию с разными данными. Таким образом, они оба работают с одними и теми же данными инструкций в оперативной памяти. Как это гарантируется, что они не смешиваются? Это то, для чего предназначен переключатель контекста?
Я думаю, что у меня есть некоторое недопонимание о том, как функции работают на уровне машинного кода. Помощь приветствуется.