|
|
| Посл.отвђт | Сообщен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 (оно же "куча") была еще тогда, когда ни винды, ни ООП и в проекте не валялось. Так что осталось выяснить, что значит "куча" в Паскале, и это будет самое исконное значение этого слова. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.101 |