На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
  
> "Новый взгляд" на контейнеры , по версии явиста
    Цитата Qraizer @
    У Майерса один из советов был "не знаете, какой контейнер использовать, берите вектор".

    Aга и получайте out of memory, лучше бы он или другой кто , показал
    пример как использовать аllocator, Я не хочу на два умножать и тратить память
    в пустую.

    Добавлено
    Цитата applegame @
    Он предлагает никогда не использовать связные списки? Совсем что-ли тронулся умом старый?
    https://www.youtube.com/watch?v=YQs6IC-vgmo

    Где ты услышал слово никогда? Он говорит почему не стоит юзать,
    хотя и не говорит почему таки иногда его пользовать таки стоит, ;)

    Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"

    Эта тема была разделена из темы "Новый взгляд на контейнеры"
      settler, не хочешь, не трать. Кто тебя заставляет-то?

      Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
        Цитата Qraizer @
        settler, не хочешь, не трать. Кто тебя заставляет-то?

        out of memory и заставляет ;)

        Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
          Цитата settler @
          Aга и получайте out of memory

          list и прочие контейнеры больше памяти жут, чем вектор, очевидно.

          Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
            Цитата OpenGL @
            Цитата settler @
            Aга и получайте out of memory

            list и прочие контейнеры больше памяти жут, чем вектор, очевидно.

            list больше на 8 байт это очевидно,
            если имеем x байт у вектора , то list - х+8 ,
            при размере n , sizeofVextor - *x*n , list - n(x+8)
            при добавке елемента sizeofVextor - 2*x*n , list - (n+1)(x+8)
            при больших n list меньше , если х большой то на 8 можно забить,

            Если програмист этого не знает, то он ламер. ;)

            Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
              По-моему то, что ты написал, написать может только ламер :crazy: Мало того, что написанные тобой якобы формулы - пустой набор символов, не несущих смысловой нагрузки, так ещё и вывод, который ты делаешь из них, очевидно неверный банально из-за того, что list-у на каждый элемент, помимо этого самого элемента, нужно хранить указатель на следующий. Вероятно, bad_alloc может у вектора случиться раньше, чем у list-а, но это будет из-за невозможности найти непрерывный кусок памяти нужного размера, а вовсе не из-за того, что он больше занимает памяти.

              Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                Цитата settler @
                list больше на 8 байт это очевидно,
                если имеем x байт у вектора , то list - х+8 ,
                при размере n , sizeofVextor - *x*n , list - n(x+8)
                при добавке елемента sizeofVextor - 2*x*n , list - (n+1)(x+8)
                при больших n list меньше , если х большой то на 8 можно забить,

                Если програмист этого не знает, то он ламер. ;)

                Боже, какой бред! :wall:

                На, проверяй:

                ExpandedWrap disabled
                  #include <stdio.h>
                  #include <memory>
                  #include <vector>
                  #include <list>
                   
                  namespace mmap_allocator_namespace {
                    template <typename T>
                      class mmap_allocator: public std::allocator <T> {
                        public: typedef size_t size_type;
                        typedef T * pointer;
                        typedef
                        const T * const_pointer;
                   
                        template <typename _Tp1>
                        struct rebind {
                          typedef mmap_allocator <_Tp1> other;
                        };
                   
                        pointer allocate(size_type n,
                          const void * hint = 0) {
                          fprintf(stdout, "Alloc %d bytes.\n", n * sizeof(T));
                          return std::allocator <T> ::allocate(n, hint);
                        }
                   
                        void deallocate(pointer p, size_type n) {
                          fprintf(stdout, "Dealloc %d bytes (%p).\n", n * sizeof(T), p);
                          return std::allocator <T> ::deallocate(p, n);
                        }
                   
                        mmap_allocator() throw (): std::allocator <T> () {
                          fprintf(stdout, "Hello allocator!\n");
                        }
                        mmap_allocator(const mmap_allocator & a) throw (): std::allocator <T> (a) {}
                        template <class U>
                        mmap_allocator(const mmap_allocator <U> & a) throw (): std::allocator <T> (a) {}~mmap_allocator() throw () {}
                      };
                  }
                   
                  using namespace std;
                  using namespace mmap_allocator_namespace;
                   
                  int main() {
                    // раскомментируем нужное:
                    // vector<int, mmap_allocator<int>> int_vec(32, 0, mmap_allocator<int>());
                    // list<int, mmap_allocator<int>> int_lst(32, 0, mmap_allocator<int>());
                    return 0;
                  }


                Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                  Цитата settler @
                  при добавке елемента sizeofVextor - 2*x*n , list - (n+1)(x+8)
                  Дай ссылку, где бы чётко показывалось, что не (n+1)*x

                  Добавлено
                  Цитата settler @
                  out of memory и заставляет
                  А. Понятно. Не читатель.

                  Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                    Цитата Qraizer @
                    Дай ссылку, где бы чётко показывалось, что не (n+1)*x

                    man 3 realloc, или сорцы вектора, или ,
                    там есть умножение на два, чтобы выделить блок памяти
                    когда size=upperLimit, нормальные люди перегружают исходя их конкретной
                    задачи,
                    Да ты все это знаешь, только дурку косишь ;)

                    Добавлено
                    Цитата JoeUser @

                    Ну проверил, алокаторы работают по разному, у вектора есть внутренние attributes,
                    под которые память тоже выделаеться,

                    проверь сам

                    ExpandedWrap disabled
                        vector<int> v;
                      cout<< sizeof(v) ;
                      vector<int> l;
                      cout<< sizeof(l) ;


                    Если увидишь разницу то расскажешь ;)

                    Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                      Знаю. Только я ещё кое-что знаю, потому что документацию читал.

                      Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                        Цитата OpenGL @
                        Вероятно, bad_alloc может у вектора случиться раньше, чем у list-а, но это будет из-за невозможности найти непрерывный кусок памяти нужного размера, а вовсе не из-за того, что он больше занимает памяти.

                        Не Вероятно, bad_alloc может у вектора случиться раньше , а случиться на 100%,

                        Вероятность bad_alloc листа равна 0.00000001 ;

                        Причину ты указал, расчеты мои ты не понял потому что я сравнивал
                        с массивом, а sizeof(vector) eq sizeof(list), и применяемы они для разных целей,
                        The second one is not instead of the first, it's in additional.
                        Как это на-русский перевезти?

                        Добавлено
                        Цитата Qraizer @
                        Знаю. Только я ещё кое-что знаю, потому что документацию читал.

                        Скорее книгу по Data Structures, или OS, лет так 15-20назад ;)
                        Это общие базовые/фундаментальные вещи не зависимые от ЯП,

                        А алокатор как я уже понял совсем для других целей придуман.

                        Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                        Сообщение отредактировано: settler -
                          Цитата settler @
                          у вектора есть внутренние attributes,

                          А у списка нет?

                          Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                            Цитата JoeUser @
                            Цитата settler @
                            у вектора есть внутренние attributes,

                            А у списка нет?

                            А зачем они ему?
                            Хотя проверь а тo мало ли ;)

                            Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                              Цитата settler @
                              проверь сам

                              M
                              settler, давай доказательства своих расчетов в студию!

                              Пиши код, показывай суммарные аллокации памяти (включая твои пресловутые attributes), у вектора и листа. Если этого не будет, я посчитаю твой пост от начала и до конца - демагогией и троллингом. Выводы и действия себя ждать не заставят - просто возьми и поверь мне.


                              Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                Цитата settler @
                                Скорее книгу по Data Structures, или OS, лет так 15-20назад
                                Не-а. Стандарт языка.

                                Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                  Цитата settler @
                                  Не Вероятно, bad_alloc может у вектора случиться раньше , а случиться на 100%,

                                  То есть вот тут произошло событие с нулевой вероятностью? :D
                                  Code
                                  ExpandedWrap disabled
                                    #include <vector>
                                    #include <vector>
                                    #include <algorithm>
                                    #include <iostream>
                                    #include <map>
                                    #include <optional>
                                    #include <memory>
                                    #include <type_traits>
                                    #include <list>
                                    #include <sys/time.h>
                                    #include <sys/resource.h>
                                     
                                    template<class C> void gen()
                                    {
                                        C v;        
                                        for(int i = 0; i < 5000; ++i) v.push_back(i);
                                    }
                                     
                                    int main()
                                    {
                                        rlimit lim;
                                        lim.rlim_cur = 0;
                                        lim.rlim_max = 1000000;
                                        setrlimit(RLIMIT_AS, &lim);
                                        gen<std::vector<int>>();
                                        std::cout << "Vector was generated\n";
                                        
                                        //gen<std::vector<int>>();
                                        //std::cout << "Vector2 was generated\n";
                                        
                                        gen<std::list<int>>();
                                        std::cout << "List was generated\n";
                                    }
                                    }

                                  Вывод:
                                  ExpandedWrap disabled
                                    terminate called after throwing an instance of 'St9bad_alloc'
                                    Vector was generated
                                      what():  std::bad_alloc
                                    Aborted


                                  Если ты заменишь std::list в последнем примере на std::vector - внезапно всё отработает. Как это поведение объяснимо в твоей картине мира? :D

                                  Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                  Сообщение отредактировано: OpenGL -
                                    Цитата OpenGL @
                                    Если ты заменишь std::list в последнем примере на std::vector - внезапно всё отработает. Как это поведение объяснимо в твоей картине мира?

                                    В реальных задачах память всегда дефрагментирована и bsd_alloc, когда ты пытаешься выделить один большой кусок памяти, случится гораздо вероятнее, чем когда вделяешь много маленьких.

                                    Вообще, сравнивать vector и list - это примерно как сравнивать пароход с паровозом - который из них лучше?
                                    Это совершенно разные структуры для реализации разных задач. Проблемы возникают ене потому что, один хуже или лучше другого, а потому, что для решения конкретной задачи используется не тот контейнер.

                                    Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                      Цитата Олег М @
                                      В реальных задачах память всегда дефрагментирована и bsd_alloc, когда ты пытаешься выделить один большой кусок памяти, случится гораздо вероятнее, чем когда вделяешь много маленьких.

                                      Это понятно. Тут спорят с бредом "вектор потребляет больше памяти", которые его срасчёты вроде как по его мнению показывают.

                                      Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                        Цитата OpenGL @
                                        Это понятно. Тут спорят с бредом "вектор потребляет больше памяти", которые его срасчёты вроде как по его мнению показывают.

                                        Ты понимаешь как вектор добавляет новый елемент ?
                                        Сколько он выделает памяти ? Сколько выделяет список ?

                                        Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                          Цитата settler @
                                          Ты понимаешь как вектор добавляет новый елемент ?

                                          А почему ты спрашиваешь? Ты не догадываешься, что я на этот вопрос отвечу? :D
                                          Ответь лучше на вопрос выше - почему мой код падает с bad_alloc в случае списка и не падает в случае вектора если вектор занимает памяти больше :whistle:

                                          Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                            Олег М, как ты понимаешь значение слова "дефрагментирована"?
                                            Потому как у меня при прочтении твоих постов возникают некоторые сомнения, что ты полностью понимаешь, что в них пишешь.

                                            Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                              Цитата OpenGL @
                                              Цитата settler @
                                              Ты понимаешь как вектор добавляет новый елемент ?

                                              А почему ты спрашиваешь? Ты не догадываешься, что я на этот вопрос отвечу? :D
                                              Ответь лучше на вопрос выше - почему мой код падает с bad_alloc в случае списка и не падает в случае вектора если вектор занимает памяти больше :whistle:

                                              Ну так твой код, Я так писать еще не научился, ;)
                                              Вектор увеличивает памать в два раза, то есть выделил памать под 1000
                                              элементов - а надо 1001, так вот на 1001 он выделает *2 то есть 2000, (999байт коту под хвост)
                                              на 2001 - 4000, и т.д. Tак пишут в книгах по OS,
                                              в какой то момент будет out of memory, памяти всего может быть, но может не быть
                                              linear memory block, до сих что не так ?

                                              Лист не занимает больше памяти он больше выделает,(sizeof() = 24 дважды) и потом стирает,(см сорцы)
                                              фактически у него не два поинтера а три (третий temp каждый раз выделает и делилит память),
                                              возможно при больших обьемах он не увеличивает размер на два, возможно оптимизатор
                                              собирает статистику и выделает память более умно, но это мои догадки,

                                              так вот в твоем случае память не дефрагментирована, по сути пустая, нету с чего, и с тем что я написал не столкнулся, то есть нет проблем выделить linear memory block,


                                              Теперь проводи свое обьяснение, возможно оно будет лучше,
                                              Да для тех кто не в курсе от языка это не зависит.
                                              Да очень возможно что "папа" не несет чушь, зная ихний менталитет, думаю он
                                              специально не договаривает.

                                              Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                                settler, можешь объяснить, почему из своих наблюдений ты делаешь выводы, а из наблюдений других не делаешь никаких? Сколько тебе кода уже предоставили? Сам посчитаешь? Сколько коду было от тебя? Я уже посчитал.

                                                Сообщения были разделены в тему "Новый взгляд на контейнеры"

                                                Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                                  !
                                                  JoeUser, заряжай.



                                                  Эта тема была разделена из темы "Что несет Бьёрн Страуструп?"
                                                  Сообщение отредактировано: JoeUser -
                                                    Цитата amk @
                                                    Олег М, как ты понимаешь значение слова "дефрагментирована"?
                                                    Потому как у меня при прочтении твоих постов возникают некоторые сомнения, что ты полностью понимаешь, что в них пишешь.


                                                    Ну, для начала расскажи как ты понимаешь значение этого слова, а то что-то у меня возникают сомнения.
                                                      Цитата settler @
                                                      Вектор увеличивает памать в два раза, то есть выделил памать под 1000
                                                      элементов - а надо 1001, так вот на 1001 он выделает *2 то есть 2000, (999байт коту под хвост)
                                                      на 2001 - 4000, и т.д. Tак пишут в книгах по OS,

                                                      Во-первых, если мне надо 1001 элемент, я выделю 1001 элемент, а не 1000, как это ни странно :D Во-вторых, это будет только при реаллокации, так что не страшно. В-третьих, на практике коэфициент 2 используют редко - обычно он меньше. И в-чётвёртых даже если предположить, что у меня действительно capacity вдвое больше, чем size, занимаемая память всё равно будет меньше из-за того, что sizeof(void*) в данном случае вдвое больше самого int-а, а это значит в твоём сценарии памяти съест вектор всё равно в полтора раза меньше, чем такой список :D

                                                      Добавлено
                                                      Цитата Олег М @
                                                      Ну, для начала расскажи как ты понимаешь значение этого слова, а то что-то у меня возникают сомнения.

                                                      Вероятно, он о том, что реально ты хотел сказать "в реальных задачах паметь фрагментирована" :)
                                                        Цитата OpenGL @
                                                        Вероятно, он о том, что реально ты хотел сказать "в реальных задачах паметь фрагментирована"


                                                        Да, точно, ошибся.
                                                          settler, вектор старается уменьшитьчисло перераспределений памяти, но не настолько. Ёмкость удваивается только пока вектор относительно небольшой. при средних размерах ёмкость увеличивается наполовину, Большие вектора увеличиваются при перераспределении где-то на четверть. При этом вектор всё так же имеет линейные затраты, просто константа увеличивается. При этом мы ещё и избавляемся от одного неприятного явления, проявляющегося при удвоении ёмкости, когда освобождённой ранее вектором памяти, даже после склейки освобождённых кусков всё время не хватает для нового буфера (память становится одноразовой).
                                                          Кроме того, если примерное количество мест в векторе известно, всегда можно запросить нужный размер вручную сразу, тогда вектор вообще перераспределять память не будет.

                                                          Добавлено
                                                          Олег М, просто ты такую ошибку допустил в каждом из мест, где писал о фрагментации.
                                                            Цитата amk @
                                                            settler, вектор старается уменьшитьчисло перераспределений памяти, но не настолько. Ёмкость удваивается только пока вектор относительно небольшой. при средних размерах ёмкость увеличивается наполовину, Большие вектора увеличиваются при перераспределении где-то на четверть. При этом вектор всё так же имеет линейные затраты, просто константа увеличивается. При этом мы ещё и избавляемся от одного неприятного явления, проявляющегося при удвоении ёмкости, когда освобождённой ранее вектором памяти, даже после склейки освобождённых кусков всё время не хватает для нового буфера (память становится одноразовой).

                                                            Это вполне логично,(свои вектора примерно так и делают),как ты понимаешь это тема есть в любом языке, в Ява сорцах явно видно как умножается на два (если надо могу выложить),
                                                            ArrayList на 3/2, где сказано про c++ vector что в нем так как ты говоришь, и как это
                                                            грамотно изменить для конкретной задачи ? В яве наследуют тут надо писать свой алокатор ?
                                                            или что ?

                                                            Добавлено
                                                            Цитата amk @
                                                            Кроме того, если примерное количество мест в векторе известно, всегда можно запросить нужный размер вручную сразу, тогда вектор вообще перераспределять память не будет.

                                                            Это понятно, я говорю о том когда неизвестно , лист для того и придумал,
                                                            да там оверхад в 16байт(два поинтера) и memory overflow будет как в примере OpenGL но когда сам обьект большой оно мало влияет, ну кто мешает юзать sigleList он есть в C++11 ЕМНИП.

                                                            Добавлено
                                                            Цитата OpenGL @
                                                            Во-первых, если мне надо 1001 элемент, я выделю 1001 элемент, а не 1000, как это ни странно :D

                                                            Как ни странно ты об этом не всегда заранее знаешь ;)
                                                            И представь себе что данные постоянно то стираються то добавляются снова,
                                                            В этом случае нужен лист и лучше single,

                                                            Добавлено
                                                            Цитата OpenGL @
                                                            Во-вторых, это будет только при реаллокации, так что не страшно.

                                                            Если реаллокации много то может и страшно, от задачи зависит.

                                                            Добавлено
                                                            Цитата OpenGL @
                                                            В-третьих, на практике коэфициент 2 используют редко - обычно он меньше.

                                                            Речь шла о стандартном контейнере , на практике ты можешь делать как ты хочешь,
                                                            если данные приходят стохастически, то не можешь подобрать правильную
                                                            статегию, Я в таких случаях делаю лист а потом зная четкий размер перегоняю в вектор,
                                                            а еще лучше если могу то в массив.

                                                            Добавлено
                                                            Цитата OpenGL @
                                                            И в-чётвёртых даже если предположить, что у меня действительно capacity вдвое больше, чем size, занимаемая память всё равно будет меньше из-за того, что sizeof(void*) в данном случае вдвое больше самого int-а, а это значит в твоём сценарии памяти съест вектор всё равно в полтора раза меньше, чем такой список :D

                                                            Не понял , кто у тебя void*

                                                            смотри еще раз мои расчеты, what is wrong here ?

                                                            ExpandedWrap disabled
                                                              class Node<T>{
                                                               node* prev;
                                                               node* next;
                                                               T value;
                                                               
                                                              }


                                                            sizeof(node) = sizeof(T) + sizeof(next) +sizeof(prev) для 64бит
                                                            будет sizeof(T) + 16,

                                                            для листа будет n(sizeof(T) + 16) ,

                                                            для вектора n*sizeof(T) , при увиличении на 2 или на х , то есть при первой перелокации
                                                            имеем
                                                            для листа будет (n+1)(sizeof(T) + 16) ,
                                                            для вектора х*n*sizeof(T)

                                                            если х небольшой то проблем нет если он 2 или 1.5 и Т большой то лист выигрывает и очень не слабо,
                                                            Понимаешь что все не однозначто еще есть cashing line problem , о которой програмисты C++, c 15-20 опытом молчат как партизаны ;) и вектор можно гонять потоками, как в яве 8,
                                                            а с листом (у него нет индекса) это сложнее.

                                                            В общем разные контейнеры для разных задач, и говорить что один лучше, есть показатель
                                                            собсвенных lack of knowledge ( не путать с luck слышиться одинаково ;) )

                                                            Все .
                                                              Цитата Qraizer @
                                                              settler, можешь объяснить, почему из своих наблюдений ты делаешь выводы, а из наблюдений других не делаешь никаких? Сколько тебе кода уже предоставили? Сам посчитаешь? Сколько коду было от тебя? Я уже посчитал.

                                                              Почему из других не делаю? вот код openGL
                                                              и навел, точнее дополнил, трех строк хватило,
                                                              а что в моих выводах не устраивает(они не мои а Вирта или
                                                              Таненбаума, и лет им по 20-25 если не больше ) . А ты типо про работу OS
                                                              никогда не слышал , ага счас поверил, ;)

                                                              А месть за КрымНеНашь (джо зажигай) это глупо, ты же не ватник типа Кили,
                                                              или програма , Или Я ошибаюсь ? ;)
                                                                Так. Давай-ка заглянем в историю. Итак.
                                                                Цитата settler @
                                                                Цитата Qraizer @
                                                                У Майерса один из советов был "не знаете, какой контейнер использовать, берите вектор".

                                                                Aга и получайте out of memory, лучше бы он или другой кто , показал
                                                                пример как использовать аllocator, Я не хочу на два умножать и тратить память
                                                                в пустую.
                                                                Цитата Qraizer @
                                                                settler, не хочешь, не трать. Кто тебя заставляет-то?
                                                                Как по-моему, amk этот мой ответ прокомментировал исчерпывающе. А вот предупреждение в синей рамке ты получил за то, что это сделал именно amk, а не ты. Материала тебе было предоставлено выше крыши. Это во-первых. Вместо того, чтобы искать у себя ошибки в рассуждениях и следовательно учиться, ты продолжил демонстрировать совершенное нежелание вести предметный разговор. Это твоё решение, на которое ты, конечно, имел полное право. Пусть тебе и плевать на свою репутацию, само по себе это ничего не нарушает. Но вот то, что ты т.о. проигнорил предупреждение в синей рамке от модератора, как раз и явилось настоящей причиной банки на 14 дней. Это во-вторых. Ровно эта же причина отражена и в логах. И не надо тут искать политических заговоров.

                                                                Добавлено
                                                                Собственно, если ты проигнорил в "не знаете, какой контейнер использовать, берите вектор" выделенное синим, этого уже было достаточно, чтобы выкинуть дискуссию в корзину.
                                                                  Цитата Qraizer @
                                                                  А вот предупреждение в синей рамке ты получил за то, что это сделал именно amk, а не ты.

                                                                  Ага только пост amk был после,

                                                                  Добавлено
                                                                  Цитата Qraizer @
                                                                  Так. Давай-ка заглянем в историю. Итак.
                                                                  Цитата settler @
                                                                  Цитата Qraizer @
                                                                  У Майерса один из советов был "не знаете, какой контейнер использовать, берите вектор".

                                                                  Aга и получайте out of memory, лучше бы он или другой кто , показал
                                                                  пример как использовать аllocator, Я не хочу на два умножать и тратить память
                                                                  в пустую.
                                                                  Цитата Qraizer @
                                                                  settler, не хочешь, не трать. Кто тебя заставляет-то?

                                                                  Ну и что тут не так, помоему ясно было что речь идет что речь об обьектах,
                                                                  у меня они от 500К до 3Мега, и приходят они по сокету , когда и и сколько
                                                                  мне не известно, поэтому перeгрузка ensureCapacity (push back in C++) о которой
                                                                  тут говорят мало что даст,

                                                                  Добавлено
                                                                  Цитата Qraizer @
                                                                  Собственно, если ты проигнорил в "не знаете, какой контейнер использовать, берите вектор" выделенное синим, этого уже было достаточно, чтобы выкинуть дискуссию в корзину.

                                                                  А вот это уже wrong IMHO, не знаешь что юзать бери redblackTree,
                                                                  на любом языке, почему тебе обьяснять не надо, а вот некоторые
                                                                  этого не знают, или мне кажется, а ворнинги пошли после политики
                                                                  и с приходом джо, или так случайно получилось ;)

                                                                  Добавлено
                                                                  Цитата Qraizer @
                                                                  Но вот то, что ты т.о. проигнорил предупреждение в синей рамке от модератора,

                                                                  Ну да устроили клоунаду, я как раз и привел расчеты, после примера
                                                                  openGL , У меня vector<int> держит 58мил записей, таких коллекций
                                                                  в природе не бывает( а если и бывают то решается это совсем по-другому и не програмным путем) а вот 500,000 тяжелых обьектов , например в системах ERP, где в DB бывает
                                                                  по 30-40 полей, а бывает и 200, это уже другая опера, пока я вижу детсский сад,
                                                                  типо сам дурак, а где и что сказал не так привести не можем, ну джо эт лист не может,
                                                                  поэтому и привел скаченный из тугля алокатор не понимая зачем.

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

                                                                  Учиться говоришь не хочу, уже раз пять просил обьяснить как юзать алокатор, или почему
                                                                  и когда наоборот не надо,
                                                                  за все время был один ответ "тебе он не нужен" , и банку там никто не давал заметь,
                                                                    Цитата settler @
                                                                    где сказано про c++ vector что в нем так как ты говоришь, и как это
                                                                    грамотно изменить для конкретной задачи ?
                                                                    Для меня всегда главным документом по вопросам, определённым в стандарте как зависящее от реализации были файлы заголовков и исходные тексты библиотек.
                                                                    Грамотно (и законным образом) изменить поведение библиотечного класса можно лишь написав свою версию этого класса (возможно унаследовавшись от этого библиотечного).

                                                                    Цитата settler @
                                                                    Ага только пост amk был после,
                                                                    Возможно, имеется в виду, что ты сам даже после рамки не попытался разобраться в вопросе. И объяснение дождалось меня
                                                                    Я обычно в будни только раз в сутки где-то на часок на форум заглядываю. С работы возможности нет, а дома и других дел полно.
                                                                        Т.е. ты так ничего и не понял, settler.

                                                                        Добавлено
                                                                        Мои девочки в отделе, что на испытательном были, уже через минуту после вопроса об оберхеде вектора нашли ответ, тебе для этого потребовался amk. Ты уверен, что ты программист? Девочки-то тестеры. Они не отказываются учиться и не страдают синдромом диванного аналитизма.
                                                                        Во-первых, советовать ассоциативные контейнеры на безусловную замену последовательным может только полный профан. Во-вторых, нет, объяснять надо. Тот же Майерс свой тезис аргументировал весьма объёмным текстом. Ты же, как я погляжу, считаешь свои тезисы аксиомами. Не многовато-ли из себя изображаешь, а?
                                                                        Ты привёл расчёты. Угу. Аха. Ну да. Клоунада заключалась, видимо, в том, что реальный код их опроверг. И это даже не насторожило, не говоря уже о том, что должно было бы заставить броситься немедленно читать мануалы. Браво. Это надо же, какая вера в собственную святость. Нет, братан, спасибо за профессиональную импотенцию тебе никто говорить не будет.

                                                                        Добавлено
                                                                        !
                                                                        Что происходит в Политическом гадюшнике, мне совершенно коллинеарно. С волками жить – по волчьи выть. Если ты там себя проявляешь аналогично, то предупреждаю: появишься такой красивый в МШ, увидишь разницу от Политики.
                                                                        В сухом остатке.
                                                                        • прямое оскорбление участника, дважды (неделя*2);
                                                                        • флуд в тематическом разделе (3 дня);
                                                                        • вред участникам и гостям форума посредством дезинформирования (3 дня + премод на 20 дней).
                                                                          Цитата settler @
                                                                          Ты читал что эта мразь мне писала...
                                                                          Отчего столь сильно бомбануло то, Серж?.. :blink:
                                                                          Неужто пропиндосам от мегаоблома по захвату Крыма:
                                                                          Цитата settler @
                                                                          месть за КрымНеНашь
                                                                          крайне тяжко стало жить?.. :)
                                                                            Цитата settler @
                                                                            И представь себе что данные постоянно то стираються то добавляются снова,
                                                                            В этом случае нужен лист и лучше single,

                                                                            Да ладно :unsure: Неужели ты хочешь сказать, что нужно брать тот контейнер, который удобнее сейчас, а не всегда один и тот же? :crazy:

                                                                            Цитата settler @
                                                                            Если реаллокации много то может и страшно, от задачи зависит.

                                                                            Если в какой-то задаче это будет страшно, то я просто выберу другой контейнер - в отличие от тебя, у меня нет предубеждения ни к одному из них, так что мне несложно заюзать тот, который подойдёт лучше :D

                                                                            Цитата settler @
                                                                            смотри еще раз мои расчеты, what is wrong here ?

                                                                            Тебе уже несколько раз об этом говорили - ты почему-то считаешь, что при добавлении элемента всегда происходит реаллокация и как следствие - ты не учитываешь, что при добавлении второго-третьего и далее до capacity элементов в вектор потребление памяти расти не будет, в отличие от списка. Хочешь оценить ожидаемое потребление памяти - оцени именно его. Хотя для этого математику надо знать, а с ней, судя по твоим постам, у тебя большие проблемы :D

                                                                            Добавлено
                                                                            Цитата amk @
                                                                            Грамотно (и законным образом) изменить поведение библиотечного класса можно лишь написав свою версию этого класса (возможно унаследовавшись от этого библиотечного).

                                                                            Если только приватно. Наследоваться публично от вектора или прочих стандартных контейнеров - неплохой способ выстрелить себе в ногу.
                                                                              Мне кажется, что название не отражает сути, ибо дело тут не в Яве...
                                                                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                              0 пользователей:


                                                                              Рейтинг@Mail.ru
                                                                              [ Script execution time: 0,1035 ]   [ 16 queries used ]   [ Generated: 16.04.24, 08:47 GMT ]