2016-06-29 2 views
0

Я новичок в программировании. Я изучал переменные и натолкнулся на определение в Интернете:Где именно хранятся переменные в программе C?

Переменные - это имена, которые вы указываете на ячейки памяти компьютера, которые используются для хранения значений в компьютерной программе.

Что это за ячейки памяти? Связаны ли эти места с фактической памятью компьютера, или это просто дамп в самой программе, откуда он вызывает эти переменные позже, когда мы в них нуждаемся? Также есть другие термины, которые я встречал здесь, при переполнении стека, как куча и стек. Я не мог обдумать это. Пожалуйста помоги.

+1

Это зависит от класса хранения переменной. –

+0

Это также зависит от того, где вы определяете переменные. И возможно, если они инициализированы в определении или нет. –

+1

читайте о куче и стеке здесь: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap – CIsForCookies

ответ

0

То, как вы задали вопрос, предполагает, что вы ожидаете одного ответа. Это просто не так.

В грубом смысле все переменные будут существовать в памяти во время выполнения вашей программы. Память, в которой существуют ваши переменные, зависит как от нескольких вещей.

Современное компьютерное оборудование часто имеет довольно сложную архитектуру физической памяти - с несколькими уровнями кеша (как в ЦП, так и в различных периферийных устройствах), несколько регистров процессора, общую память, различные типы ОЗУ, запоминающие устройства, EEPROM и т. Д. В разных системах эти типы памяти - и больше типов - в разных пропорциях.

Операционные системы могут сделать память доступной для вашей программы по-разному. Например, он может предоставлять виртуальную память, используя комбинацию ОЗУ и зарезервированного пространства на жестком диске (и управляющих сопоставлений, поэтому ваша программа не может отличить эту информацию). Это может позволить вашей программе использовать больше памяти, чем физически доступно в качестве ОЗУ, но также влияет на производительность, поскольку операционная система должна обменивать память вашей программы между ОЗУ и жестким диском (что обычно на порядок медленнее).

Множество компиляторов и библиотек реализовано для максимизации производительности ваших программ (различными способами) - оптимизация вашего кода (что может привести к тому, что некоторые переменные в вашем коде не существуют даже при запуске вашей программы), библиотечные функции созданный для производительности и т. д. Одним из следствий этого является то, что компилятор или библиотека могут использовать память по-разному (например, некоторые реализации могут вставлять код в ваш исполняемый файл для обнаружения ресурсов памяти, доступных при запуске программы, другие могут просто предположить фиксированный объем ОЗУ), и использование может даже меняться со временем.

+0

Большинство современных компьютеров не имеют кэш-памяти и не требуют оперативной памяти. У большинства комьютеров есть MCU с очень ограниченным ОЗУ/Flash. Они превосходят численность компьютеров с ОС полного роста на протяжении десятилетий. – Olaf

Смежные вопросы