· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Объектно ориентированное программирование

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Ноя 16, 2004 08:32:54

Binary digit, wasm`овцы!
/*это у меня вместо приветствия :) */

Решил я изучать алгоритм шифрования, :( Вроде бы все нашел, но то,
что нашел заточенно под с++. Хорошо, сказал я и принялся изучать
с++. Изучая этот ЯВУ у меня возникало, возникает и предполагаю бу-
дут возникать вопросы. Часть из них уже не имеет смысла, ибо есть
ответы на них, а на какую то часть, к сожалению нет уверенных отве-
тов и доказательств! :(

ЭТа "какая-то часть", связана с Объектно-ориентированным программиро-
ванием. Чтобы получить вопросы, а ответы на них я действительно ис-
кал, я решил обратиться на мой любимый форум! (пользуясь случаем пе-
редам всем приветы). И что бы не было сумбурности я решил эти воп-
росы задавать постепенно, как только будет получен точный и исчерпа-
вающий ответ на прежний.

Итак..
вопрос №1:
Что такое КУЧА? И что такое динамическая память(ДП)? Являются ли эти
понятия синонимами?

Мои предполажения:
Куча это не занятое виртуальное адрессное пространство, т.е. какая то
часть этого протранства занята к примеру вордом(4 ГБ), винампом(4 ГБ)
и т.д. а остаточное это и есть куча.
ДП - это не занятое адрессное пространство в в пространстве ПРОЦЕССА,
т.е. свободная часть в предалах 4 ГБ.
А по сему думаю, что ДП и куча не синонимы.

Насколько верны мои предположения?

ЗЫ: Прошу не отворачиваться, а помочь по мере возможности. А если есть
возможность, то с докозательством своих суждений, пример доказательст-
ва в аттаче.

С уважением Evil`s Interrupt.

1160885702__constructor.cpp


Дата: Ноя 16, 2004 09:09:10

это правильно.


Дата: Ноя 16, 2004 09:26:07

Правильно с:
>Итак..
>вопрос №1:
Я правильно тебя понял?


Дата: Ноя 16, 2004 10:15:36

Динамическая память - память, выделенная системой по запросу процесса из КУЧИ, со всеми вытекающими...


Дата: Ноя 16, 2004 11:57:25

StoneColdCrazy
А про кучу я верно написал?


Дата: Ноя 16, 2004 12:35:40

Dynamic storage - это то, что создаётся оператором new.
Ещё есть automatic storage - это переменные, которые объявляются с использованием ключевого слова 'auto' :)
Всё остальное - это static storage.

Как компилятор реализует new - его личное дело, возможно это будет HeapAlloc() или sub esp,XXXXX (как в случае с 'auto')
Как бы то ни было, и куча и то что ты называешь ДП находятся всегда в адресном пространстве твоего процесса.
Причём, куча - это ДП, но обратное не верно.


Хотя возможно, то что я тут написал - полная чушь :-)
Ведь, динамическая память, это те микросхемы, которые напаяны на DIMM'ах.


ЗЫ: IMHO wasm`овцы выглядит не очень благозвучно, когда-то спектрумисты и амижники использовали такое ругательство:
IBM'овцы =)


Дата: Ноя 16, 2004 13:02:50

человек старался, но я все равно не понял. :( Стас, прежде чем говорить о new надо понимать с чем он оперирует, а не понимаю этих понятий(куча, к примеру) можешь сказать однозначно?


Дата: Ноя 16, 2004 13:09:15

Вот здесь так написано:
„Динамическая память (ДП) — оперативная память персонального компьютера(ПК), предоставляемая программе при ее работе за вычетом сегмента данных стека и тела программы. Ее размер определяется всей доступной памятью ПК.“
(Правда, в Windows это определение некорректно)
А здесь так:
„Динамическая оперативная память - полупроводниковая оперативная память, в которой каждый двоичный разряд хранится в схеме, состоящей из транзистора и конденсатора. Заряженный конденсатор соответствует 1, разряженный - 0. Транзистор управляет доступом к конденсатору. По сравнению со SRAM заметно более дешевая, хотя и более медленная по двум причинам - емкость заряжается не мгновенно, и, кроме того, имеет ток утечки, что делает необходимой периодическую подзарядку.“
Так что у ДП два значения.
EvilsInterrupt
Про кучу ты написал чушь. И так каша в башке, так ты туда каждый день еще наваливаешь.

Кучей считают область памяти, управляемую алгоритмом динамического распределения. Если ты сам реализуешь такой алгоритм и не будешь пользоваться HeapCreate, HeapAlloc, - все равно можешь смело обзывать это кучей. Под Windows стандартная куча - это область памяти, управляемая Windows, и работа с ней ведется через Heap* функции. А насчет виртуального адресного пространства ты загнул. У любой проги его 4Гб, и винамп туда не входит - он обитает в своем пространстве. Куча - это не "не занятое пространство", а тот участок, который Винда выделит при вызове HeapCreate. Конечно, он выделится из незанятого пространства, но вряд ли займет его все.


Дата: Ноя 16, 2004 14:09:25

EvilsInterrupt > „прежде чем говорить о new надо понимать с чем он оперирует“

НЕТ!! Не нужно ничего понимать - ты же не пишешь 'С++ implementation' (т.е. компилятор)
Есть такое понятие, и всё тут. Делаешь new - объект создаётся, делаешь delete - удаляется.
Память выделяется динамически в процессе работы программы - поэтому и название dynamic storage.
А как это всё происходит - знать не нужно.
Это же абстракция ;-)
С++ memory model, например, не гарантирует, что байт - это 8 бит, что и говорить о более сложных вещах..


Дата: Ноя 16, 2004 14:23:22

Оператор new выделяет память из кучи - если говорить о низкоуровневой реализации, то это простое резервирование памяти под структуру объекта(поля + методы + таблица виртуальных функций) и возвращение указателя на эту область памяти. Если говорить о реализации в Windows - в конечном итоге вызывается VirtualAlloc или что-то типа того (зависит от компилятора). Статические объекты, в свою очередь (просто объявленные без new) резервируются в стеке.


Дата: Ноя 16, 2004 15:43:19

EvilsInterrupt
То что ты определил в самом начале ,как куча -
это свободная виртуальная память(!) системы.
IMHO, куча определяет метод выделения/работы
с динамической памятью, чтобы отличить его
от других, хотя вспомнить что-то принципиально
отличное от кучи сейчас не могу.
Видимо, для краткости динамическая память
программы , выделяемая по "методу кучи"
тоже называется куча :-)


Дата: Ноя 16, 2004 15:54:22

>Есть такое понятие, и всё тут
Если бы цивилизация всегда так говорила, то мы далеко не ушли


Дата: Ноя 16, 2004 18:01:26

Ты хочешь найти ответы на вопросы, которых не существует в принципе.
Разновидности storage, которые понимает С++ я перечислил.
Где там heap, откуда ты его прицепил с языку прогораммирования?
IMHO heap - отнисится к виндосу, а не к С++.
Дальше - данные в С++ различаются по "времени жизни", про различия в реализации речи нет (хотя разумеется само различае есть)
То как будут реализованы все эти Dynamic storage зависит только от фантазии автора компилятора.
Можно для каждого байта вызывать в отдельности VirtualAlloc, но так делать никто не будет :-)
А как делают, есть только один способ узнать - взять исходник, откомпилировать конкретным компилятором, и посмотреть.
Пойми, С - это в первую очередь абстракция, создан он как раз для того, что бы у людей не возникало вопросов о всяких там байтах. Когда это поймёшь, бери отладчик и с трезвой головой вперёд :-)


Дата: Ноя 16, 2004 18:14:55

Arvensis
> Про кучу ты написал чушь. И так каша в башке, так ты туда каждый день еще наваливаешь.

Тонко подмечено ;-)


Дата: Ноя 16, 2004 21:07:58

S_T_A_S_
ЗЫ: IMHO wasm`овцы выглядит не очень благозвучно, когда-то спектрумисты и амижники использовали такое ругательство:
IBM'овцы =)

"Писюканцы", однако :-)

S_T_A_S_
Где там heap, откуда ты его прицепил с языку прогораммирования?
IMHO heap - отнисится к виндосу, а не к С++.

В Паскале heap (оно же "куча") была еще тогда, когда ни винды, ни ООП и в проекте не валялось. Так что осталось выяснить, что значит "куча" в Паскале, и это будет самое исконное значение этого слова.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.101