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

                                Это сообщение было перенесено сюда или объединено из темы "Что несет Бьёрн Страуструп?"
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0463 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:11 GMT ]