Планировал писать про указатели, но после осмысления материала понял, что надо копать глубже. Чтобы было видно, как создаются проблемы и как они решаются, и что всё это происходит естественным путём, и в результате возникают контексты исполнения, глобальные и локальные переменные и прочее. Представим, что мы изобретаем простейший компьютер, где может работать только одна программа, и она всегда загружается с самого начала памяти, то есть с адреса 0. Пусть программа имеет длину 2 килобайта. Значит, адреса памяти с 0 по 2047 будут заняты кодом программы, а с 2048 и до конца памяти будут свободны. В программе мы оперируем некими данными (пусть это будет число 5), и их надо положить в память на хранение. Но куда именно? Так как вся память принадлежит нашей программе, мы можем выбрать любую свободную ячейку памяти. Например, с адресом 3000. Но проще и логичнее выбирать их по порядку. Первая свободная ячейка находится по адресу 2048, значит её и выберем. Тогда на придуманном нами машинном я