Здравствуйте, Marty, Вы писали:
E>>Оценки какие-то будут?.. E>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?.. M>А ты этим что хотел доказать? M>millioncharsvector.cpp M>
Здравствуйте, koodeer, Вы писали:
K>Ещё как падают. Многие программы на 32-битной Винде падают именно из-за фрагментации АП, хотя свободной памяти достаточно. Из известных таких программ могу назвать браузеры Chrome и Firefox.
Хром у меня и на Win7/x64 регулярно падает
Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще?
Здравствуйте, Marty, Вы писали:
M>Хром у меня и на Win7/x64 регулярно падает M>Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще?
64-х битной официальной пока что вроде нет. Но даже 32-х битная версия коли падает, то скорее всего из-за чего-то другого, а не памяти.
А ты что хотел сказать? Что у меня больше миллиона? Так я знаю, просто миллион отработал, я решил посмотреть, когда упадет, а файл переименовывать уже лень было.
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Marty, Вы писали:
M>>Хром у меня и на Win7/x64 регулярно падает M>>Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще? F> 64-х битной официальной пока что вроде нет. Но даже 32-х битная версия коли падает, то скорее всего из-за чего-то другого, а не памяти.
Сдается мне, что GDI ресурсы утекают у них, потому что когда хром падает, скайп пишет, что "Canvas does't allow drawing". Ну это так, дилетанский вывод вообщем
Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?
И сразу, чтобы два раза не писать — покажи свой результат для std::deque.
E>>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?..
M>>А ты этим что хотел доказать?
M>>millioncharsvector.cpp
Здравствуйте, Marty, Вы писали:
E>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?..
M>А ты этим что хотел доказать?
M>millioncharsvector.cpp M>Результат M>
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?
Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был
Тест же показал, что примерно 700 миллионов char'ов добавляются в конец без проблем.
EP>И сразу, чтобы два раза не писать — покажи свой результат для std::deque.
А самому слабо? Весь код есть
Здравствуйте, Marty, Вы писали:
EP>>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал? M>Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был
Это был сарказм. Поэтому я и не понял к чему был твой тест в ответ на сообщение Erop'а.
M>Тест же показал, что примерно 700 миллионов char'ов добавляются в конец без проблем.
Что не удивительно, учитывая что у MSVC'шного вектора capacity растёт на 50%. То есть в момент реаллокации в памяти находится 2.5x от текущей capacity.
EP>>И сразу, чтобы два раза не писать — покажи свой результат для std::deque. M>А самому слабо? Весь код есть
Здравствуйте, Marty, Вы писали:
EP>>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал? M>Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был
Егор прочитал непойми где что "VirtualAlloc помогает". Объяснить, как именно помогает VirtualAlloc, он не смог, ограничился "Почитай Рихтера" и "читай как устроены хипы"
Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.
Здравствуйте, vdimas, Вы писали:
V>Не факт. Периодически или же при невозможности найти подходящий непрерывный кусок памяти менеджер хипа занимается поиском и склейкой прилегающих пустых областей. При этом сами страницы упорядочиваются в иерархии по размерам по основанию двойки, т.е. склейка довольна дешева, две склеенные страницы образуют новую.
V>В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет.
Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?
Здравствуйте, Ikemefula, Вы писали:
I>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.
Тут вообще-то другой случай, практически не относящийся к фрагментации
Вот тебе задачка: какого максимального размера удастся получить vector<char>, делая while(true) x.push_back('\0');, без всяких reserve, при grow factor 1.5 и при идеальной стратегии выделения памяти на x32 (учитывая 2GiB доступной памяти)?
Здравствуйте, Ikemefula, Вы писали:
V>>В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет. В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет. Никакой дефрагментации. Освобождаемые предыдущие блоки памяти будут представлять собой непрерывный кусок незанятого места. I>Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?
Если ты утверждаешь что это фрагментация, то попробуй сделать (или попроси Marty) тот же тест но добавив и v.reserve(1000*1000*680); в начало.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Если ты утверждаешь что это фрагментация, то попробуй сделать (или попроси Marty) тот же тест но добавив и v.reserve(1000*1000*680); в начало.
Конечно фрагментация, т.к. требуемый размер всей свободной памяти больше чем запрашиваемый.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Тут вообще-то другой случай, практически не относящийся к фрагментации EP>Вот тебе задачка: какого максимального размера удастся получить vector<char>, делая while(true) x.push_back('\0');, без всяких reserve, при grow factor 1.5 и при идеальной стратегии выделения памяти на x32 (учитывая 2GiB доступной памяти)?
Это вроде как первый пример Marty , там нет никакого reserve и тд. Но вобще при grow factor 1.5 и идеальной стратегии должна выюзаться почти вся память.
I>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.
Ты утверждал, что все заткнется из-за дефрагментации, не?
И облажался, по результатам теста. Если в тесте после грубо 660 метров не удалось выделить память, то это значит, что всего было запрошено порядка 660*3=1980 метров. ЧТД.
Здравствуйте, vdimas, Вы писали:
I>>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.
V>Ты утверждал, что все заткнется из-за дефрагментации, не? V>И облажался, по результатам теста. Если в тесте после грубо 660 метров не удалось выделить память, то это значит, что всего было запрошено порядка 660*3=1980 метров. ЧТД.
А почему на три надо помножать, если добавляем по одному байту ?