Чем отличается динамическая память от статической
Различие между динамической и статической памятью — в способе хранения информации. В статической памяти данные хранятся вплоть до замены их новым блоком информации. В качестве элементарной ячейки статической памяти используется статический триггер. Статическая память обладает высоким быстродействием и используется для организации кэш-памяти. Динамическая память постоянно опрашивается, и ее содержание обновляется с частотой циклов регенерации. Она имеет меньшую скорость работы, но по критерию, учитывающему информационную емкость, стоимость и энергопотребление, она предпочтительней.
Модули оперативной памяти
Элементы динамической памяти выполенны в виде модулей SIMM (Single-In-line Memory Module) и DIMM (Dual-In-line Memory Module). В отличие от SIMM, у модулей DIMM контакты на противоположных сторонах платы электрически не связаны между собой, практически вдвое увеличено количество выводов. DIMM — это двухсторонний модуль.
Виды модулей памяти:
Размещение памяти
На материнской плате современного компьютера для установки модулей памяти предусмотрены специальные разъемы (на рис. их по два):
72-pin SIMM Socket
Количество разъемов того или другого или другого типа зависит от типа материнской платы, ее производителя.
Все возможные конфигурации памяти, т.е. тип, емкость, быстродействие и количество элементов, устанавливаемых на материнской плате, приводятся в документации на материнскую плату. Размер установленной оперативной памяти BIOS определяет автоматически.
DIMM Socket
Динамическое vs Статическое выделение памяти
1 способ предпочтительнее из-за скорости, но не редко я вижу 2 способ. Так в чем же разница (кроме возможности сделать delete когда захочется)?
Отслеживать
51.6k 200 200 золотых знаков 60 60 серебряных знаков 242 242 бронзовых знака
задан 4 сен 2019 в 11:14
33 7 7 бронзовых знаков
Зависит от того, что вам нужно. Вопрос из серии на чем лучше ездить — на грузовике или на автобусе? исходите из конкретной задачи.
4 сен 2019 в 11:16
Ну динамическое выделение памяти имеет место быть, когда вам заранее неизвестно сколько чего будет. Например, вы парсите xml документ и выделяете память под ноды.
4 сен 2019 в 11:20
@Harry Как раз я не понимаю на чем мне лучше ездить. Можете сказать куда копать? Может какие-то ссылки есть?
4 сен 2019 в 11:21
@GetName Вы так говорите, как-будто Вам обязательно нужно выбрать один какой-то способ, и использовать только его, так как он «лучше». Если бы это было так, то был бы только один способ, «лучший», а худшего в принципе бы не было в языке, а зачем. Но в C++ два способа, следовательно есть ситуации когда удобнее один, а есть ситуации, когда удобнее другой. std::lock_guard — это один из примеров использования плюсов хранения объектов на стеке. Пример использования плюсов динамического хранения объектов — std::list , который внутри использует динамич. выделение памяти для работы с узлами списка.
4 сен 2019 в 11:33
статическое используется, чтобы автоматически удалился объект из стека. А динамическое — нет. Вот и вся разница.
4 сен 2019 в 11:41
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Разница в способе хранения данных.
В первом случае переменные хранятся в стеке программы. Из этого следует:
- Ограниченные область видимости и время жизни.
- При выходе из области видимости происходит автоматическое разрушение хранимых переменных.
- Более высокая скорость выделения/освобождения памяти.
Во втором случае хранение переменных происходит в куче. Куча медленнее стека выделяет и освобождает ресурсы, автоматически не очищается (по крайней мере в стандартном C++), подвержена фрагментации. Однако имеет некоторые особенности:
- Время жизни переменной не ограничено процессом выполнения. Без явного вызова delete переменная будет существовать до конца выполнения программы.
- Зная адрес переменной в куче, к ней можно получить доступ из любой области видимости.
- Куча в некотором смысле «резиновая». В отличие от стека, она ограничена только физически.
В итоге, создание в стеке следует использовать в случаях, когда переменная небольшого или приемлемого размера либо используется только здесь и нигде больше.
Если же переменная должна использоваться в процессе жизни всей программы, доступ к ней нужен в любой момент времени, ее создание/копирование занимает много времени/памяти или же неизвестно заранее, какой объем памяти нужен, то есть смысл использовать кучу (создать один раз и потом использовать готовый экземпляр из кучи, нежели создавать и инициализировать каждый раз аналог в стеке).
Однако, при работе с кучей нужно быть осторожным. Ошибки при работе с динамической памятью чреваты утечками памяти и sigsegv-ами.
Советую еще почитать про представление кучи и стека. Там есть ссылки на полезную информацию.
UPD: Касательно скорости работы с кучей привожу выхлоп дизассемблера Qt 5.13 (MinGW 7.3.0):
3 [1] < 0x401560 55 push %rbp 0x401561 48 89 e5 mov %rsp,%rbp 0x401564 48 83 ec 30 sub $0x30,%rsp 0x401568 e8 f3 00 00 00 callq 0x401660 4 [1] int a = 10; 0x40156d c7 45 fc 0a 00 00 00 movl $0xa,-0x4(%rbp) 6 [1] int *b = new int; 0x401574 b9 04 00 00 00 mov $0x4,%ecx 0x401579 e8 22 00 00 00 callq 0x4015a0 0x40157e c7 00 0a 00 00 00 movl $0xa,(%rax) 0x401584 48 89 45 f0 mov %rax,-0x10(%rbp) 7 [1] delete b; 0x401588 48 8b 45 f0 mov -0x10(%rbp),%rax 0x40158c 48 89 c1 mov %rax,%rcx 0x40158f e8 14 00 00 00 callq 0x4015a8 9 [1] return 1; 0x401594 b8 01 00 00 00 mov $0x1,%eax 10 [1] > 0x401599 48 83 c4 30 add $0x30,%rsp 0x40159d 5d pop %rbp 0x40159e c3 retq
Видно, что при работе с динамической памятью присутствуют дополнительные инструкции плюс вызов процедуры. Плюс к куче в многопоточных приложениях добавляются вопросы синхронизации (это конечно достаточно вторичный момент, но он тоже имеет место быть)
P.S. если что-то забыл, буду благодарен за дополнения.
чем отличается статическаЯ память от динамической, если моно поподробнее
В статической памяти информация хранится не ограниченное время (пока подаётся питание – элементарная ячейка в ней это триггер) , а динамическая требует, чтобы обращение к ней происходило через определённые периоды времени, иначе информация в ней теряется. Так как информация в ней хранится в маленьких конденсаторах. В современных компьютерах – память динамическая.
Остальные ответы
а ты ничего не перепутал?? ? Что-то я о таком не слышал!! ! Динамический IP-адрес — это да, а вот память.
Статическая эт как лист бумаги на который записал и лежит. потом берешь ластиг стираешь и пишешь новое (если возможно) (Жесткий диск, сиди диски)
а динамическая — это твои мыскли. можешь запоминать и забывать со скоростью света — это оперативная память компа DIMM DDR2 и т. д.
в программировании статическая память — память которая выделилась под нужды и никуда не девается не зависимо используется или нет. а динамическая память это память которая может высвобождаться и расширяться по мере необходимости и использования
Разница между динамическим и статическим ОЗУ
Ключевое отличие: динамический чип RAM содержит миллионы ячеек памяти, каждая из которых состоит из транзистора и конденсатора. Чип постоянно нуждается в обновлении. Статическое ОЗУ отличается тем, что оно хранит информацию в режиме триггера, что означает, что ей не требуется постоянно обновлять и не использовать конденсаторы.
Оперативное запоминающее устройство (ОЗУ) — это форма памяти, используемая компьютерами для хранения информации. Динамическое и статическое ОЗУ — это два типа ОЗУ, которые одновременно используются компьютером для хранения данных доступа.
Динамическое ОЗУ является наиболее часто используемым ОЗУ и также значительно дешевле, но даже статическое ОЗУ имеет преимущества Динамический чип RAM содержит миллионы ячеек памяти, каждая из которых состоит из транзистора и конденсатора. Конденсатор хранит электроны в ячейках памяти компьютера и отвечает за хранение информации. В динамическом ОЗУ информация хранится в виде заряда в 1 или 0, где 1 означает, что она имеет информацию, а 0 означает, что она пуста.
Транзистор действует как переключатель, который позволяет схеме управления на микросхеме памяти считывать конденсатор или изменять его состояние. Проблема в динамическом ОЗУ заключается в том, что конденсатор теряет энергию и может удерживать заряд только в течение доли секунды. Следовательно, необходимо постоянно обновлять схему для считывания заряда. Обновление происходит сотни раз в секунду, и все ячейки необходимо читать снова и снова, чтобы увидеть, есть ли информация. Таким образом, при каждой зарядке компьютер считывает и перезаписывает каждый бит информации.
Статическое ОЗУ отличается тем, что оно хранит информацию в режиме триггера, что означает, что ей не требуется постоянно обновлять и не использовать конденсаторы. Компьютер обращается к информации по мере необходимости, что делает их более энергоэффективными. Тем не менее, они имеют очень ограниченную емкость хранилища.
В ОЗУ требуется несколько транзисторов для хранения одного бита информации, что означает, что если вам нужно больше места для хранения, вам потребуется больше микросхем. Это делает его очень дорогим. Чип сравнительно быстрее, потому что читается только тот чип, на котором написано, что означает, что он может легко получить доступ к данным и не должен читать каждый бит.
Статическая ОЗУ используется для создания чувствительного к скорости кэша ЦП, в то время как динамическая ОЗУ образует большую область ОЗУ системы. Каждый раз, когда вы выключаете компьютер или перезагружаете его, система теряет кэш-память, а динамическая память ОЗУ все еще присутствует.
Сравнение между динамическим и статическим ОЗУ:
Динамическая RAM
Статическая RAM
Требуется 3-4 транзистора
Требуется 6-8 транзисторов