Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26158
Рейтинг: 2127
#241: 2012-04-11 23:15:09 ЛС | профиль | цитата
Tad писал(а):
то дальше даже читать не стоит

Всего знать невозможно, а вот про фрагментацию, возможно и прочитал где. Я вообще не понимаю этот беспредметный спор ниочем -- ну какая разница, как менеджер памяти работает с самой память -- выделяет куски или непрерывную область. Тебе хочется видеть непрерывное выделение, да -- это бычтро, но затартно и не совсем надежно, логичнее выделять кусками сшивая их в один виртуальный непрерывный массив
------------ Дoбавленo в 23.15:
На тебе ссылку, этой статье нет сонования не доверять -- http://www.rsdn.ru/article/Delphi/memmanager.xml. Там полностью описан менеджер памяти Delphi, и ты найдешь там все те же принципы, которые тут нами описаны, включая кластерное выделение памяти и цепочные описатели. Это очень хорошая статья. В принципе, при построении цепочного массива, я использовал немного усеченный принцип построения блочных описателей менеджера памяти Delphi
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#242: 2012-04-11 23:23:30 ЛС | профиль | цитата
nesco писал(а):
Тебе хочется видеть непрерывное выделение
nesco, мне ничего не хочется видеть - мне хочется знать правду, а не то, что кто "однако предполагает" . И больше ничего.
Даже в компах с 1мб оперативки выделялась непрерывная память.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26158
Рейтинг: 2127
#243: 2012-04-11 23:47:31 ЛС | профиль | цитата
Tad писал(а):
мне ничего не хочется видеть - мне хочется знать правду

Я тебе привел последнюю статью, где даже структура менеджера Delphi подробно описана, четко и ясно
------------ Дoбавленo в 23.40:
Tad писал(а):
а не то, что кто "однако предполагает"

Согласен, что первая статья из разряда -- слышал звон, но вот откуда...
------------ Дoбавленo в 23.47:
Tad писал(а):
Даже в компах с 1мб оперативки выделялась непрерывная память

Ну, это совсем не показатель. Меняется время, меняются принципы -- ушли же от трековой записи файлов, перешли на секторную и, впоследствии, на кластерную cтруктуру. Сначла был FAT (цепочные кластера и очень быстрый доступ), затем стала NTFS -- целая файловая база данных, тормознутая, но компенсируется скоростью накопителей, и надежная из-за принципа транзакций
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#244: 2012-04-11 23:54:19 ЛС | профиль | цитата
nesco писал(а):
Тебе хочется видеть непрерывное выделение
Вот я его и увидел
Если при расширении фрагмента не удалось произвести изменения размера по месту, будет выделен новый фрагмент нужного размера, и в него будет скопировано содержимое старого блока.
и не надо рассказывать сказки про раскиданные кусочки массива по всей памяти.
И второе, что я увидел - не надо мешать встроенным менеджерам работать.

И третье. По моему статья правдивая. Занёс в Избранное.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26158
Рейтинг: 2127
#245: 2012-04-12 00:10:47 ЛС | профиль | цитата
На вот тебе еще пару статей, может они тебе прояснит чего-нибудь --
http://www.hardline.ru/1/12/515/
http://vvy.me/gosi/os/60.html
Во второй статье, как раз описан принцип логического построения памяти в ОС Windows и ее сегментно-страничную память

------------ Дoбавленo в 00.04:
Tad писал(а):
и не надо рассказывать сказки про раскиданные кусочки массива по всей памяти

При организации массива ну очень большого размера, уже не менеджер памяти Delphi будут работать, а менеджер ОС, который тебя может и на диск отправить к файлу подкачки, но для твоей программы -- это будет непрерывная виртуальная память. Так что я бы поостерегался на твоем месте делать категорические заявления об обязателной непрерывности физической памяти при организации массива, насчет виртуальной, то я согласен, она будет непрерывной
------------ Дoбавленo в 00.10:
Tad писал(а):
не надо мешать встроенным менеджерам работать

Никто им не мешает, а просто рассматривают некоторые принципы организации построения своих структур, разбирая по косточкам чужие. Ну вот интеесно стало рассмотреть свое построение кластерного массива, для пользователя ведь он тоже непрерывный, хотя и состоит из раскиданных кусков. После чего удалось быстро повторить принцип в схемопостроении. А пользователи недавно искали некое подобие матрицы для любых типов данных, а это как раз оно и есть
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#246: 2012-04-12 00:22:16 ЛС | профиль | цитата
nesco писал(а):
Никто им не мешает
в паралельной теме с криком "Не работает !!!" компонент дефрагментации памяти - наглядный пример к чему приводит мешание.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26158
Рейтинг: 2127
#247: 2012-04-12 00:35:57 ЛС | профиль | цитата
Tad писал(а):
в паралельной теме с криком "Не работает !!!" компонент дефрагментации памяти - наглядный пример к чему приводит мешание.

Но это же не я орал.

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

0
Ответов: 1528
Рейтинг: 57
#248: 2012-04-12 05:33:50 ЛС | профиль | цитата
nesco, еще раз, что, как и куда ты записываешь говоря "заголовок"?
карма: 0

0
Ответов: 9906
Рейтинг: 351
#249: 2012-04-12 09:13:13 ЛС | профиль | цитата
Tad писал(а):
мне хочется знать правду

Tad, тебе сказали правду. В том смысле, как оно есть на самом деле, а не как кто-то говорит или пишет.
Не веришь -- логичнее взять и проверить, а не [контр]аргументировать одной цитатой, против другой. Делов-то, на полчаса... наверное быстрее, чем до "спецов" дойти.

Давай изложим первую ПРАВДУ на пальцах:
1) У меня есть 2Г памяти физической, и я выделяю себе первый кусок в 0.5Гига. Получаю нулевые стартовые адреса - как физический, так и логический
2) Мне нужен еще один объект, тоже 0.5Гига. Благополучно выделяю. Получаю стартовые адреса 0x20000000 - как физический, так и логический
3) Хочу расширить первый массив до 1Гига. Получаю для него новый логический адрес 0x40000000 с таким же размером. То есть, непрерывный кусок логических данных. А физически он состоит из двух кусков: первый (0-0x1FFFFFFF) мэпится в логическое пространство (0x40000000-0x5FFFFFFF), и второй (0x40000000-0x5FFFFFFF) мэпится в логическое пространство (0x60000000-0x7FFFFFFF).
4) И все, не надо ничего ТУПО копировать. И главная правда заключается в том, что железячники для того и сделали эту виртуализацию, чтобы логический кусок памяти был непрерывный (для быстрого доступа ко всем элементам массива), а тупо копировать Гиги было бы не надо.
А то, что физически память "страшно фрагментирована" - это вообще всем по барабану. Программист об этом и не узнает никогда. Точно так же, как программист никогда не узнает, если на микросхеме памяти (статической) поменять местами два адресных проводочка. Или данных.
Все просто, в общем-то... ПРАВДА, она вообще склонна к простоте.



Вторая ПРАВДА заключается в том, что делать такое можно только на уровне оси. Железячники такую возможность предоставили. Делает ли это ОСЬ - проверить можно. Поскольку юридических обязательств (в смысле - документировать) разработчики ОСИ на себя брать не склонны.
А на более низком уровне (например, на уровне разработчиков менеджера памяти в Дельфи) этого сделать нельзя. Если не обращаться с сервисам ОСИ (и эти сервисы, видимо, должны содержать в своем имени магическое слово realloc).
Элементарно же, Ватсон !!!
Если не обращаются, значит тупо копируют. Хоть пишут они б этом, хоть нет -- да по барабану, у них тупо нет других вариантов.
А ПРАВДА -- вещь объективная, ей пофиг, вообще-то, кто чего пишет.



Ну, Tad, какая тебе еще правда нужна

карма: 9

0
Разработчик
Ответов: 26158
Рейтинг: 2127
#250: 2012-04-12 09:13:42 ЛС | профиль | цитата
hitman249 писал(а):
что, как и куда ты записываешь говоря "заголовок"?

Я уже примеры сделал. Там все показано. Десять раз повторять одно и то же, я уже устал
карма: 22

0
Ответов: 1528
Рейтинг: 57
#251: 2012-04-12 10:01:16 ЛС | профиль | цитата
nesco, трудно понять то, что написано на языке которого не знаешь, а схема не передаёт достаточную информацию для низкоуровневого понимания.
гораздо полезнее было бы просто описать в двух словах как "я создаю 2 массива, в первый я кладу информацию о длинне массива и ссылку на второй массив" или "в каждый массив в первую ячейку я кладу ссылку на следующий массив"
карма: 0

0
Разработчик
Ответов: 26158
Рейтинг: 2127
#252: 2012-04-12 10:36:25 ЛС | профиль | цитата
hitman249 писал(а):
гораздо полезнее было бы просто описать в двух словах как "я создаю 2 массива, в первый я кладу информацию о длинне массива и ссылку на второй массив" или "в каждый массив в первую ячейку я кладу ссылку на следующий массив"


Ни так, ни так. Я создаю структуру, где первый элемент содержит указатель на следующую структуру (если следующей структуры нет, то nil), второй элемент структуры -- это, собственно, сам массив данных фиксированной длины. И зачем создавать два массива, если для работы может хватить всего одного, к примеру, тебе нужен массив на 100 элементов, при размере кластера в 1024 элемента
карма: 22

0
Ответов: 1528
Рейтинг: 57
#253: 2012-04-12 12:45:18 ЛС | профиль | цитата
[offtop]
nesco писал(а):
Я создаю структуру

nesco писал(а):
где первый элемент

ну вот где он? этот первый элемент. в чем он хранится если структура != массиву ?

[/offtop]
карма: 0

0
Ответов: 1061
Рейтинг: 22
#254: 2012-04-12 12:55:30 ЛС | профиль | цитата
hitman249,
nesco писал(а):
второй элемент структуры -- это, собственно, сам массив данных фиксированной длины.

В структуре хранится и массив и указатели! Структура конечно не массив, но она может хранить в себе массив!
карма: 0

0
Ответов: 1528
Рейтинг: 57
#255: 2012-04-12 12:58:45 ЛС | профиль | цитата
ещё раз для RinniX
hitman249 писал(а):
в чем он хранится

hitman249 писал(а):
первый элемент

карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)