Re[9]: собеседования, Реверс списка
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 14:32
Оценка: +1
Здравствуйте, Marty, Вы писали:

E>>Оценки какие-то будут?..

E>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?..
M>А ты этим что хотел доказать?
M>millioncharsvector.cpp
M>
M>        const int maxI = 1024*1024*1024;
M>

M>Результат
M>
M>...
M>i = 689594368
M>i = 689595392
M>Error: bad allocation
M>

http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%BE%D0%BD
Re[31]: собеседования, Реверс списка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.10.13 14:35
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Ещё как падают. Многие программы на 32-битной Винде падают именно из-за фрагментации АП, хотя свободной памяти достаточно. Из известных таких программ могу назвать браузеры Chrome и Firefox.


Хром у меня и на Win7/x64 регулярно падает

Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще?
Маньяк Робокряк колесит по городу
Re[32]: собеседования, Реверс списка
От: fddima  
Дата: 14.10.13 14:38
Оценка:
Здравствуйте, Marty, Вы писали:

M>Хром у меня и на Win7/x64 регулярно падает

M>Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще?
64-х битной официальной пока что вроде нет. Но даже 32-х битная версия коли падает, то скорее всего из-за чего-то другого, а не памяти.
Re[10]: собеседования, Реверс списка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.10.13 14:55
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%BE%D0%BD


А ты что хотел сказать? Что у меня больше миллиона? Так я знаю, просто миллион отработал, я решил посмотреть, когда упадет, а файл переименовывать уже лень было.
Маньяк Робокряк колесит по городу
Re[33]: собеседования, Реверс списка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.10.13 14:57
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Marty, Вы писали:


M>>Хром у меня и на Win7/x64 регулярно падает

M>>Хотя, сейчас глянул, он у меня 32-х-битный в процессах висит. Странно, почему 64бита версия не поставилась. А она такая есть вообще?
F> 64-х битной официальной пока что вроде нет. Но даже 32-х битная версия коли падает, то скорее всего из-за чего-то другого, а не памяти.

Сдается мне, что GDI ресурсы утекают у них, потому что когда хром падает, скайп пишет, что "Canvas does't allow drawing". Ну это так, дилетанский вывод вообщем
Маньяк Робокряк колесит по городу
Re[11]: собеседования, Реверс списка
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 15:03
Оценка: +1
Здравствуйте, Marty, Вы писали:

EP>>http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%BE%D0%BD

M>А ты что хотел сказать? Что у меня больше миллиона? Так я знаю, просто миллион отработал, я решил посмотреть, когда упадет, а файл переименовывать уже лень было.

Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?
И сразу, чтобы два раза не писать — покажи свой результат для std::deque.

E>>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?..
M>>А ты этим что хотел доказать?
M>>millioncharsvector.cpp

Re[9]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 15:18
Оценка: -1 :)))
Здравствуйте, Marty, Вы писали:

E>>ну, например, как ты думаешь, если вот тупо взять и написать на плюсах std::vector<char> и начать в него добавлять по одному, миллион символов добавить удостся?..


M>А ты этим что хотел доказать?


M>millioncharsvector.cpp

M>Результат
M>
M>...
M>i = 689594368
M>i = 689595392
M>Error: bad allocation
M>


Эх, чОрт, не помог VirtualAlloc
Re[12]: собеседования, Реверс списка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.10.13 15:23
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?

Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был
Тест же показал, что примерно 700 миллионов char'ов добавляются в конец без проблем.

EP>И сразу, чтобы два раза не писать — покажи свой результат для std::deque.

А самому слабо? Весь код есть

...
i = 1073740800
Char at random position: '3'


Даже не упало


#if !defined(_IOSTREAM_) && !defined(_STLP_IOSTREAM) && !defined(__STD_IOSTREAM__) && !defined(_CPP_IOSTREAM) && !defined(_GLIBCXX_IOSTREAM)
    #include <iostream>
#endif

#if !defined(_VECTOR_) && !defined(_STLP_VECTOR) && !defined(__STD_VECTOR__) && !defined(_CPP_VECTOR) && !defined(_GLIBCXX_VECTOR)
    #include <vector>
#endif

#if !defined(_DEQUE_) && !defined(_STLP_DEQUE) && !defined(__STD_DEQUE__) && !defined(_CPP_DEQUE) && !defined(_GLIBCXX_DEQUE)
    #include <deque>
#endif

#if !defined(_EXCEPTION_) && !defined(__EXCEPTION__) && !defined(_STLP_EXCEPTION) && !defined(__STD_EXCEPTION)
    #include <exception>
#endif

#if !defined(_STDEXCEPT_) && !defined(_STLP_STDEXCEPT) && !defined(__STD_STDEXCEPT) && !defined(_CPP_STDEXCEPT) && !defined(_GLIBCXX_STDEXCEPT)
    #include <stdexcept>
#endif

#ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
#endif

#ifndef STRICT
    #define STRICT
#endif

#if !defined(_WINDOWS_)
    #include <windows.h>
#endif



int main(int argc, char* argv[])
   {
    try{
        const int maxI = 1024*1024*1024;
        //std::vector<char> v;
        std::deque<char> v;
        for(int i=0; i!=maxI; ++i)
           {
            if (i && i%1024 == 0) std::cout<<"i = "<<i<<"\n";
            char ch = ' ' + (char)(i%64);
            //v.append(1, ch);
            v.push_back(ch);
           }
        std::cout<<"Char at random position: '"<<v[GetTickCount()%maxI]<<"'\n";

       }
    catch( const std::exception &e )
       {
        std::cout<<"Error: "<<e.what()<<"\n";
       }
    catch( ... )
       {
        std::cout<<"Error: unknown\n";
       }
    
    return 0;
   }
Маньяк Робокряк колесит по городу
Re[13]: собеседования, Реверс списка
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 15:39
Оценка: +2
Здравствуйте, Marty, Вы писали:

EP>>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?

M>Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был

Это был сарказм. Поэтому я и не понял к чему был твой тест в ответ на сообщение Erop'а.

M>Тест же показал, что примерно 700 миллионов char'ов добавляются в конец без проблем.


Что не удивительно, учитывая что у MSVC'шного вектора capacity растёт на 50%. То есть в момент реаллокации в памяти находится 2.5x от текущей capacity.

EP>>И сразу, чтобы два раза не писать — покажи свой результат для std::deque.

M>А самому слабо? Весь код есть

Мне интересен был твой результат.
Re[13]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 15:54
Оценка: :)))
Здравствуйте, Marty, Вы писали:

EP>>Давай по порядку. Что ты хотел своим тестом показать? И что по твоему он показал?

M>Я не совсем понял, что Erop хотел сказать, но судя по тону фразы он сомневался, что в вектор можно последовательно добавить миллион char'ов. или это сарказм был

Егор прочитал непойми где что "VirtualAlloc помогает". Объяснить, как именно помогает VirtualAlloc, он не смог, ограничился "Почитай Рихтера" и "читай как устроены хипы"

Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.
Re[16]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 15:56
Оценка: -3
Здравствуйте, vdimas, Вы писали:

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


V>В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет.


Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?
Re[14]: собеседования, Реверс списка
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 16:13
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.


Тут вообще-то другой случай, практически не относящийся к фрагментации
Вот тебе задачка: какого максимального размера удастся получить vector<char>, делая while(true) x.push_back('\0');, без всяких reserve, при grow factor 1.5 и при идеальной стратегии выделения памяти на x32 (учитывая 2GiB доступной памяти)?
Re[17]: собеседования, Реверс списка
От: Evgeny.Panasyuk Россия  
Дата: 14.10.13 16:35
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

V>>В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет. В общем, если будешь добавлять по 1-му символу в сишный вектор, то ничего военного не произойдет. Никакой дефрагментации. Освобождаемые предыдущие блоки памяти будут представлять собой непрерывный кусок незанятого места.

I>Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?

Если ты утверждаешь что это фрагментация, то попробуй сделать (или попроси Marty) тот же тест но добавив и v.reserve(1000*1000*680); в начало.
Re[18]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 17:17
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Если ты утверждаешь что это фрагментация, то попробуй сделать (или попроси Marty) тот же тест но добавив и v.reserve(1000*1000*680); в начало.


Конечно фрагментация, т.к. требуемый размер всей свободной памяти больше чем запрашиваемый.
Re[15]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 17:22
Оценка:
Здравствуйте, 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 и идеальной стратегии должна выюзаться почти вся память.
Re[17]: собеседования, Реверс списка
От: vdimas Россия  
Дата: 14.10.13 17:34
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?


Не дохнет.
Re[14]: собеседования, Реверс списка
От: vdimas Россия  
Дата: 14.10.13 17:43
Оценка: +2
Здравствуйте, Ikemefula, Вы писали:


I>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.


Ты утверждал, что все заткнется из-за дефрагментации, не?
И облажался, по результатам теста. Если в тесте после грубо 660 метров не удалось выделить память, то это значит, что всего было запрошено порядка 660*3=1980 метров. ЧТД.
Re[15]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 17:46
Оценка:
Здравствуйте, vdimas, Вы писали:

I>>Своим примером ты показал, что VirtualAlloc ничем не помогает, а помогает grow factor 1.5 и то, слабовато, т.е. все равно всё сдохло. То есть, все работает, как и должно.


V>Ты утверждал, что все заткнется из-за дефрагментации, не?

V>И облажался, по результатам теста. Если в тесте после грубо 660 метров не удалось выделить память, то это значит, что всего было запрошено порядка 660*3=1980 метров. ЧТД.

А почему на три надо помножать, если добавляем по одному байту ?
Re[18]: собеседования, Реверс списка
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.10.13 17:47
Оценка:
Здравствуйте, vdimas, Вы писали:

I>>Тест в этом же треде с тобой не согласен — все дохнет как и должно быть Ты уже манагер, что ли ?


V>Не дохнет.


Error: bad allocation


"не дохнет" это оно ?
Re[10]: собеседования, Реверс списка
От: vdimas Россия  
Дата: 14.10.13 17:47
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Эх, чОрт, не помог VirtualAlloc


Да вы, батенька, считать не умеете. ))
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.