1. Си / Говнокод #13405

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    int main(){
    
    setbuf(stdout,NULL); //disable output buffering
    
    char *str=malloc(8);
    strcpy(str,"abcdefgh");
    
    str=realloc(str,strlen(str)+8);
    strcat(str,"efghefgh");     //sprintf(str,"%s%s",str,"efghefgh");
    
    int imax=1024/strlen(str)*1024*4;
    
    printf("%s","exec.tm.sec\tstr.length\n"); //fflush(stdout);
    
    time_t starttime=time(NULL);
    char *gstr=malloc(0);
    int i=0;
    char *pos;
    int lngth;
    
    char *pos_c=gstr;
    int str_len=strlen(str);
    
        while(i++ < imax+1000){
            lngth=strlen(str)*i;
            gstr=realloc(gstr,lngth+str_len);
            strcat(gstr,str);    //sprintf(gstr,"%s%s",gstr,str);
            pos_c+=str_len;
    
            pos=gstr;
            while(pos=strstr(pos,"efgh")){
                memcpy(pos,"____",4);
            }
    
            if(lngth % (1024*256)==0){
                printf("%dsec\t\t%dkb\n",time(NULL)-starttime,lngth/1024); //fflush(stdout);
            }
        }
    //printf("%s\n",gstr);
    
    }

    http://raid6.com.au/~onlyjob/posts/arena/ - банальый пример бенчмарков всяких недоЯП. Это новый топ10 шедевр на этот месяц.

    Именно про такие бенчи кукарекают питушки, когда ссылаются на какие-то бенчи - самое смешно в этом то, что %подставить имя ЯП% сравнивать с сишкой бесполезно, ибо их стдлиб написана на Си и дрёглает либц. Т.е. сравнивая стдлиб разных ЯП - вы сравниваете сишные реализации и оверхеды самих ЯП.

    Запостил: superhackkiller1997, 11 Июля 2013

    Комментарии (174) RSS

    • на счет местных питухов согласен
      Ответить
    • Ответить
    • Не все ЯП основаны на libc. Некоторые основаны на dietlibc или на newlib.
      Ответить
      • libpituh.so
        Ответить
      • Если этот ЯП притендует на хотябы минимальный перфоманс - в нём стдлиб написанна на Си(asm), максимум на плюсах. Это аксиома. В самых понтовых - там вариации сиасма, аля glibc.

        И в жаве, и в пхп, и в руби, и в сишарпе, и в плюсах и в перле и в питоне.
        Ответить
        • Есть языки с либой на ассемблере, которая на libc не основана. И есть всякий изврат типа Форта, написанный на нём самом.
          Ответить
          • А где я говорил что-то про либц? Я и написал, что 99% stdlib(не сишных, а стдлиб твоего ЯП) написанны на сишке(систайлплюсах). Асм либы - это исключения, которые хз зачем кто-то начал писать на асм.

            Форт написан на сишке, это как сишный препроцессор. В нём тупо нет стдлиб, а код гинерится гинератором на сишке. Мы говорим про софтварные реализации.

            Поэтому в 100% случаев ты мериешь не производительность своего языка - а качество написания на сишке стдлиба и оверхеда твоего ЯП. Смысла сравнивать это с сишкой нет, ибо сишка в любом случае либо в хлам уделает, либо даст такой же перфоманс(шанс на это предельно мал). Ты согласен?
            Ответить
            • Ну так бенчмарк для того и нужен, чтобы посмотреть, во сколько раз язык сливает по сравнению с оптимумом. Сишка = 1, остальные языки измераются в этих единицах.
              Ответить
              • Не язык, а реализация стдлиб. Т.е. идёт тупо сравнение кода на сишке.

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

                Работает это лишь потому, что на этих ЯП выполняют примитивные операции - аля парсинг строк и код 95% выполняет Сишный уровень. Чем сложнее проект - тем больше в программе времени занимает исполнение твоего кода - и тут уже проявляется реальная производительность ЯП.


                Надо понять, что это совершенно разные вещи, который лишь в паре областей пересекаются из-за способов юза ЯП.
                Ответить
            • Для скриптовых языков согласен. Для языков, требующих VM, тоже.

              Остаются языки, у которых есть свой кодогенератор. Я допускаю, что они могут проиграть gcc, потому что у них может не оказаться такого понтового оптимизатора, но для уверенности нужно сравнить.
              Ответить
    • > realloc
      Что-за питушня. Где эффективный царский аллокатор? С такими методами твой код сольет сраной жабе с ее StringBuilder'ом.
      Ответить
      • LD_PRELOAD="/usr/lib/libhoard.so"
        Ответить
      • > сраной жабе с ее StringBuilder'ом.
        а чем он ТАК плох?
        Ответить
        • > он
          Она а не он. StringBuilder тут наоборот выставляется в хорошем свете, в противовес realloc'у. А жаба с точки зрения Царя - говно для заедушных анскилябр.
          Ответить
          • к языку у меня претензии есть, да.
            хотя бы за
            int a[]=new int[1]; a[0]=0;
            List b=new Vector();b.add(0);
            ну вы поняли.
            Ответить
            • > int a[]=new int[1]
              Да уж, ref бы ей точно не повредил, а то эти массивы из 1 элемента абузят для выходных параметров ;)
              Ответить
              • я про различия синтаксиса.
                вон в сирешетке же можно писать что-то вроде this.eventListener+=new MyListener(); а в жабе надо обязательно this.addEventListener(new MyEventListener()); и никак иначе
                Ответить
                • А в бусте извратились даже так:
                  path = dir / "some.file";
                  P.S. Да, в жабе перегрузка операторов не помешала бы. Код с бигдецималами или с 2d/3d точками смотрится отвратно.
                  Ответить
                • Апофеоз из того, что я видел:
                  return pl.rc.add(lc.sub(pl.rc.div(tileSize).add(mv.mc.div(tileSize).add(off.div(scales[scale])).inv()).add(sz.div(scales[scale]).div(2))).mul(tileSize));
                  Ответить
                • Нету перегрузки операторов? Да, местами напрягает.
                  Ответить
                • Не проще ли хотя бы имплементировать Set или List, тогда будет this.add? Все одинаковое должно выглядеть одинаково.
                  Ответить
            • Нет, не поняли.
              Ответить
      • Ну дак запилили на стрингбилдере - там какраз жаба в хламину в тесте сливает, просто в говнище - даже похапэ тащит. Жаба даже это питушню в жизни не обгонит.

        http://pastebin.com/ikhQrbvJ - царский вариант, который я сваял на коленке. Я даже его не оптимизировал. Я тут даже в вектор-стайле питух-реалок заюзал, чтобы питушки на 32битных питухах и включенным оверкоммитом не кукарекали на мои маллоки на 100гигобайт.
        Ответить
        • Так, сорри, не долистал тот пост с бенчами до исходников. Думал твой код, оказалось - нет.

          А жаба сливает прежде всего из-за gstr += str. Эта питушня ей сборщик мусора с резьбы срывает.
          Ответить
          • Не сборщик сливает, а O(n^2) в цикле, анксиллябра.
            Ответить
            • В 50раз на одинаковом коде сливает перлу. По памяти в 500раз. Да, O(n^2) в цикле а не жаба тормазит.
              Ответить
              • Ты смотри, питух знает про класс сложности.
                Ответить
                • Класс сложности примитивное говно для касты 95%. Это уровень 1-го класса, аля множим O() на константу - время n.

                  Правда это константу никто не учитывает, для сишки она может быть 100тактов, а для жавы 100кк, но кого это волнует.
                  Ответить
                  • Константа - это складываемое, множитель - это коэффициент, питух. И коэффициент важен при равном классе.
                    Ответить
                    • Не-не-не. Даже при разных классах константа играет роль. Все зависит от того насколько большие N будут в задаче.
                      Ответить
                      • Ну это само собой. Просто программы обычно пишутся более-менее универсальными, с рассчетом на то, что если входных данных станет не 3, а 3к или 3м, то программа не обосрется.
                        Ответить
                        • Ты о5 путаешь программы и говно. Никто программы универсальными не пишет, ибо это по определению говно. Поэтому ваш удел ваять говно за еду, но ты о5 позволяешь себе кукарекать.

                          Вот тебе пример, банальный пример. Братуха запускает этот код у себя на хасвеле - и бам - он в 5раз медленее, чем у меня на коре2. В чём же проблема? Отгадай?

                          В глибц есть 2 реализации strstr() - одна на memchr() - а он через sse2, другая на sse4.2. Вторая работает быстрее первой на много, если строка нормальная.

                          В данной задаче строка даже не влезает полностью в sse-регист, никакого выравнивания нет и прочего. Поэтому на этой маленькой строчке в 10байт, первый вариант ищет в овер3раза быстрее, чем 2-й.

                          Почему так происходит? Ибо это писали такие же питухи, которые не понимают для чего нужна strstr(), как она работает - и получают говно.
                          Ответить
                    • Константа никакого отношение к твоему выхлопу не имеет. Константа - это константа, а какая константа - это уже другой вопрос.

                      Этот коэффициент, питушок, важен в любых близких классах. Так же, важно самое n. Поэтому норальные пацаны берут константное n, берут константный коэффициент - и считают. А питухи кукарекают про O(n^2).

                      95% нормальных алгоритмов в вашей питу-теоретике - есть близкие классы, а все ваши питушарские аргументы работают только на брутфорс-сортировке и n ~= inf.

                      В этом ваша бида, ибо сам результат функции - это самое легкоподсчитываемое и примитивное значение, а вот n и коэффициент посчитать питухам не дано, поэто онатация говно.
                      Ответить
                      • Если честно, я нихуя не понял что ты прокукарекал, а разбирать влом.
                        Ответить
                      • ты ещё сложи O(2^n) и O(3^n), питушок

                        вот O(lg(n)) и O(ln(n)) складывать можно
                        Ответить
                        • ебливый пасс в москве угостит анусом, армяне чечены даги азеры - велкам! встреча на любой территории, бдсм амуницию ношу с собой, любые желания за твои деньги! пиши прямо сейчас [email protected] антон ЖДУ
                          Ответить
                  • > но кого это волнует
                    Волнует тех, кто доучил теорию сложности до конца, а не только до O(n)... В том же gmp, к примеру, некоторые извратные алгоритмы умножения включаются, емнип, в районе 1000-2000 знаков, т.к. только тогда они перебивают более простые. Т.е. кому надо - тот учитывает.
                    Ответить
                    • Таких почти нет. Тот, кто доучил доконца - уже не юзает O(n)..., а считает совершенно в иных вещах, а O(n) юзает только, чтобы питухи его понимали.
                      Ответить
                      • Ну почему. Если разница в константе в пределах одного-двух порядков, а n хотя бы 10-100, то О-нотация вполне достоверна.
                        Ответить
                      • И в каких же вещах он считает, питух?
                        Ответить
                        • Он считает от реализации, а не от абстракции, питух, ибо только анскильные животные, которые не знают низов пытаются низы свести к примитивным абстракциям.

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

                      Наверное надо приводить примеры как ты.
                      Ответить
                    • Всем похуй на твой gmp, а кому не похуй - тот действительно должен знать, по идее.
                      Ответить
                      • Тем, кому не похрен - похрена на питухов типа тебя. Без этого гмп питушок бы ничего не смог.

                        Вы бесполезные питушки, которые пользуются тем, что пилят вменяемые люди. И вместо того, чтобы благодарить их, что вы, бездари, можете за их счёт нихрена не делать и не думать - вы кукарекаете.
                        Ответить
                        • Пример, сука? Где используется gmp, кроме modexp в криптографии с открытым ключом? Нахрена он мне сдался?
                          Ответить
                          • А где же используется криптография - ах да, везде. Половина оптимизаций в твоих кукарекушка основанны на гмп.
                            Ответить
                            • Везде? В print тоже?

                              > кукарекушка
                              Говорит тебе, хуй изо рта вынь, а то кукареку да кукареку вместо человеческой речи выходит.

                              Итак, повторю вопросы: Где используется gmp, кроме modexp в криптографии с открытым ключом? Нахрена он мне сдался?
                              Ответить
                              • ssl в вебики, без которого на норм сайтеце ты не залогинишься, бабло на заплатишь и ничего не сможешь. Авторизация в нормальных системах.

                                Оптимизации чисел в конпеляторе - без гмп код 10/3 у тебявыполнялся бы в 20раз медленнее.

                                Ты обычный питух, который несёт херню, не понимания чиго он несёт вообще.

                                Да, конкретно тебе для накидывания кнопочек на формачку это не нужно, но анскильная питушара, которая бесполезна в этом мире.
                                Ответить
                                • Блядь, я говорю о программировании, хуйло тупое. Ты нерусский наверно?
                                  И далеко не везде используется gmp вообще, в яве свой код.
                                  >Оптимизации чисел в конпеляторе - без гмп код 10/3 у тебявыполнялся бы в 20раз медленнее.
                                  Для деления двух чисел используется gmp?

                                  >бесполезна в этом мире.
                                  Царь, бесполезны в этом мире люди, которые забивают гвозди микроскопом. Которые решают прикладные задачи языками для системного программирования без стандартной библиотеки. Если еще не понял - речь о тебе. А теперь поднялся и побежал нахуй, пидорва.
                                  Ответить
        • жабу я люблю даже имея объективные причины ее ненавидеть.
          Ответить
      • показать все, что скрыто???????
        Ответить
        • показать все, что скрытоОБСЛУЖУ В ЖЕНСКОМ БЕЛЬЕ КАВКАЗЦЕВ ТАДЖИКОВ УЗБЕКОВ НА СТРОЙКАХ РЫНКАХ СМС 89119017975 ИЩУ СУТЕНЕРА КАВКАЗЦА АЗИАТА МОЖНО ВЛАСТНУЮ ЖЕНЩИНУ 89119017975 СПРОСИТЬ ТАРАСА ВАЛЕРЬЕВИЧА БЕРЕЗНЯКА САНКТ-ПЕТЕРБУРГ
          Ответить
      • показать все, что скрыто???????
        Ответить
    • > realloc
      Это что еще за питушня? Где кастомный Царский аллокатор, оптимизированный под эту ситуацию? Даже сраная жаба с ее StringBuilder'ом будет работать быстрее...
      Ответить
      • Я два раза не повторяю не повторяю.
        Ответить
        • Хм. Отправил пост, на отправке форма зависла. Обновил пару раз ГК, чтобы убедиться, что не получится даблпоста. Все было норм. И тут прилетел старый пакет ;)
          Ответить
    • char *str=malloc(8);
      strcpy(str,"abcdefgh");
      Опять абузишь выравнивания в аллокаторе?
      Ответить
      • Это не мой код, чтож ты такой глупый - читать не учился?
        Ответить
        • Да я уже выше насчет этого отписал, сорь.
          Ответить
          • Да я тебе прощаю. Как вообще можно было подумать, что это написал я? Я разочарован в тебе. Это некрасивая питушня, которая не достойна даже моего взора, а не то, что быть мной созданной.
            Ответить
      • У меня программа падала, пока ко всем маллокам/реаллокам единичку не добавил. Автору повезло, потому что у него квант выравнивания был больше?
        Ответить
        • У тебя 64 битная ось?
          Ответить
          • У него либо какая-то маздайка, либо он врёт. Любой вменяемый маллок имеет минимум 8байтное выравнивание на 64битном и 4-хбайтное на 32битном питухе.

            Т.е. у него максимум мог падать фри на значениях больше 24бит, но тупо падть как он описал - она не может.
            Ответить
            • У меня вот такое предположение было: Если на 64-битке выравнивание аллокатора 8 байт (нечем сейчас проверить), то 8 байт он выделит вровень, сразу за ними пойдёт поле от аллокатора. Вот его то и запорет ноликом strcat. А упало оно скорее всего на реаллоке, которому это поле понадобилось.

              На 32-битке при выравнивании 8, и на 64-битке при выравании на 16 - не крашнется, т.к. за выделенным блоком будут торчать 4/8 байт, подравнивающие следующий блок.

              P.S. Ну или у него какая-нибудь херня для защиты кучи включена. В вижуалке вроде было нечто подобное.
              Ответить
              • Ну да, это же питух-интел. Тогда да, с 4-хбайтным выравниванием на 32битном питухе она зафейлится.
                Ответить
          • Маздайка 32-битная. Mingw крашится. Ага, на просьбу выделить 8 байт выделяет ровно 8 и ни байтом больше, потому нолик и затирает следующие данные.

            Ну и для сравнения нестандартные компиляторы. В питушиной Watcom C программа работает (после адаптации исходника: он требует, чтобы переменные объявлялись только в начале блоков). Борман С и ненавистная вижуалка валятся сразу (они, кстати, требуют такой же адаптации а-ля Алгол).
            Ответить
            • Сделай в своей маздайке 32-битной void * p1 = malloc(1), * p2 = malloc(1); fprinstf(stdout, "%p\n%p\n", p1, p2);

              И покажи нам выхлоп, не должно поидее такого быть.
              Ответить
              • Поторопился я с выводами, надо разбираться.
                00292FB0
                00292FD0
                Разница 32.

                А если вывод перенаправить в файл, то почему-то выдаёт чушь типа
                003C2FC8
                003C0E70
                Т. е. второй указатель меньше первого и выравнивание хромает.
                Ответить
                • А поувеличивай void * p1 = malloc(2), * p2 = malloc(2); fprinstf(stdout, "%p\n%p\n", p1, p2); и так до 16, пока разница не увеличится - надо поглядеть какой минимальный у него блок.

                  Тут скорее всего 16байтный блок и 8байтное выравнивание, поэтому странно, что оно крашится. Сделай fprintf(stdout, "%lx\n%lx\n", *((uint64_t *)p1 - 1), *((uint64_t *)p1 - 2)); Первая строчка должна быть не нулевой.
                  Ответить
              • Если там аллокатор юзает два слова вместо одного - может. Так что помимо самих указателей стоит еще взглянуть на дамп памяти вокруг выделенных кусков. Я думаю +-8 байт хватит, чтобы понять устройство.
                Ответить
                • Допустим, p1 = 00342FB0, p2 = 00342FD0. Пусть long int * p1; (sizeof(p1) = 4).
                  Тогда *p1 = 00342fd0 (т . е. замусорено адресом следующего блока),
                  *(p1 + 1) = 003400c4
                  *(p1 + 2) = 27debca7
                  *(p1 - 1) = 0f00a9aa
                  *(p1 - 2) = 27debca7

                  P.S. А в Ideone все нули, кроме *(p1 - 1) = 00000011.
                  Ответить
                  • В общем, в mingw при выделении 1 байта
                    *(p1 + 1) — указатель на первый блок кучи(?),
                    *(p1 + 2) == *(p1 - 2) — какая-то сигнатура (контрольная сумма?),
                    *(p1 - 1) — что то хитрое, но непосредственно перед блоком идут байты 00, 0f.
                    Ответить
                    • Маздайка, маздайка - где твоя логика. Маллок - это ФС-подобный блочный аллокатор. Он не умеет выделяет байты - он выделяет минимум блок - это 16байт(?).

                      Поэтому твои p1+n - это твоя память, доступная тебе.

                      8байт до твоего указателя - это служебная инфа, поидее там должен быть какой-то инод, но как там запиленно - я уже не помню, да и мне лень даже глядеть код этой питушни.

                      Возможно это длинна куска, который выделил тебе маллок, либо ит о и другое.

                      Если там у тебя реально 7нулей и 0f, то это длинна твоего блока в байтах - поменяй 2-й аргумент маллока на 32, 48, 64 байта - погляди.
                      Ответить
                      • Я догадываюсь, что положительные смещения смотреть бессмысленно, поскольку они содержат мусор, ибо это как раз выделенная память.

                        Оказывается, что в разных реализациях всё по-разному. В Ideone перед блоком в 32-битном числе хранится его размер, перед размером 32-битное число, равное нулю, а дальше сканировать память Ideone не позволяет — срабатывает защита.

                        В mingw же перед блоком 16-битное (да!) число хранит не размер блока, а (вероятно) количество неиспользуемых байтов до следующего выравнивания. Перед этим числом 6 байт хранят неопознанную информацию (вероятно для защиты), а перед ними 4 нулевых байта.
                        Ответить
                        • У линуксового аллокатора на 32 битке принцип примерно такой - в начале кучи 4 байта нулей для паддинга. Затем пойдет размер выделеного блока и сам блок (благодаря тем 4м байтам выровненный на 8 байт). Сам блок подравнивается догоняется нулями так, чтобы остаток от деления его размера на 8 составил 4 (чтобы после дописывания размера следующий блок тоже оказался выровненным). Как-то так.

                          > дальше сканировать память Ideone не позволяет — срабатывает защита
                          Вылезаешь за начало кучи ;)
                          Ответить
                    • > какая-то сигнатура (контрольная сумма?)
                      Ну походу действительно защита стека.
                      Ответить
                • Ты подлец мою реализацию не откомментил - иди откоменть.
                  Ответить
    • Царь. заходи сюда: 0chan.hk/c/
      Ответить
    • показать все, что скрытосделаю ануслисинг кавказцу даю в жопу
      Делаю минеты
      Ответить
    • >самое смешно в этом то, что %подставить имя ЯП% сравнивать с сишкой бесполезно, ибо их стдлиб написана на Си и дрёглает либц.
      Во-первых, в яве многое написано на яве же. А так- все правильно, зачем писать на говноязыке 30-летней давности, когда можно писать на удобных современных языках со сборкой мусора, а скорость будет почти той же?
      Ответить
      • Не будет, даже 30% перфоманс Сишки ты на яве не полуишь, даже stdlib явы, которая написанна на сишке.
        Ответить
        • Иди бенчмарки посмотри, мудило. Сравни незаоптимированный код явы и сишки.
          Ответить
    • Кстати, сишный аллокатор сливает жавоидному.
      Ответить
      • Сишный аллокатор самый быстрый в мире, и по определению не может быть медленней жавоидного, ибо был бы ты не глупым питухом и знал бы, как работает твоя жава - ты бы полнял, что как аллокатор для твоего ГЦ она юзает Си аллокатор.

        Т.е. твой жаба-аллокатор - это аллокатор над Си-аллоктором, который по определению быстрее быть не может.
        Ответить
        • не совсем так
          жабий аллокатор до поры до времени не удаляет ничего, потому не теряет времени на честную деструкцию мелких объектов
          поэтому отъедает дохуя
          а потом решает, что метров 200 занимают мертвые объекты сплошняком, и быстро их пачкой чистит
          потому некоторые бенчи даже могут показать неплохой жабий "перформанс" по сравнению с сишкой
          главное, успеть остановить бенч, пока сборщик мусора не включился
          Ответить
          • Когда уже в креты добавят оператор renew?
            Ответить
            • *в кресты
              Ответить
            • после честной реаллокации объекта надо честно вызывать у него конструктор реаллокации
              в сишке нет конструкторов и ты сам себе таджик
              Ответить
              • Да пофиг. Добавили бы. А то негоже отсасывать крестушкам у сасишников из-за их реалока
                Ответить
                • реаллок работает в крестах
                  инфа 100% например
                  Ответить
                  • Но согласись, вызывать его на кусках, выделенных через new все-таки некошерно (хотя и работает чуть реже чем всегда).
                    Ответить
                    • беда реаллока, что он делает 2в1
                      если бы не удалял старый кусок, который не может расти, а в 2 вызова бы работал - легко бы запилился и с перемещением классов
                      особенно с наличием мув-конструкторов
                      но а так там беда с кроссплатформенностью - везде свой говнокод для эмуляции реаллока
                      Ответить
                  • реалок нельзя использовать для расширения буфера, если в нем не под объекты
                    вот если бы сделали реалок, который возвращает нуль, если расширить область нельзя или хендл для последующего подтверждения расширения, если расширить можно. (притом хендл желательно в раии)
                    Ответить
              • > конструктор реаллокации
                Еще этого не хватало :) И так уже туева хуча спецконструкторов...
                Ответить
        • > Т.е. твой жаба-аллокатор - это аллокатор над Си-аллоктором
          Не совсем. В жабе же нет такого понятия как free/delete. Там, емнип, в первом поколении копирующий GC, который спасает нужные объекты, а на остальные просто забивает хуй, сбрасывая указатель аллокатора на начало кучи. Время сборки первого поколения зависит от числа нужных объектов, и никак не зависит от числа выделенных с момента предыдущей сборки. Вот следующие поколения, там да, там дольше перекапывать...

          Поэтому на некоторых сценариях жабий аллокатор может быть быстрее. Но с другой стороны такие сценарии на сишке никто использовать и не будет (выделять память мелкими кусками, почти сразу освобождая их).
          Ответить
          • Когда уже сделают сборщик мусора френдли процессор, чтобы быстро перемещать объекты не тратя 100500% процессорного времени (аппаратная поддержка сборщика мусора)
            Ответить
            • Этого никогда не будет, ибо сборщик мусора не ложится на архитектуру процессора и буде твсегда тормазит как питух. Быстрый сборщик мусора возможен только в типе памяти, из которой у тебя сделан кеш в процессоре. Т.е. где где свободное, быстрое рандомное обращение, возможность обращения сразу в несколько "ячеек" сразу и т.п.

              На тухлой конденсаторной памятиты ты этого не получишь, хоть 100500 раз запили хардварно.
              Ответить
              • когда уже быструю память запилят? где новые технологии памяти?
                Ответить
                • На бит драма надо кондёр и транзистор. На бит нормальной памяти - надо с десяток транзисторов минимум. Поэтому можно, но твоя жава жрёт памяти немеренно, поэтому ей памяти надо в 3-4раза больше, чем ущербанским плюсам и в 10раз больше, чем сишке. Это минимум - одна твоя жвм жрёт под гиг в раскачагаренном режиме.


                  Посчитай сколько будет стоить такая память и шина для неё. Для сишки хватит ручного л2 на метров 50, и сишка будет рвать в хлам всё на 97% задач. Это реально.

                  Гигабайт автоматического л2 уже не реально, а на жаве с меньшим л2 ты не пролучишь профит.
                  Ответить
                  • драм 8 gb ddr3 стоит 3к руб. срам стоит в 10 раз больше. 30к руб. я куплю
                    Ответить
                    • В 10раз больше - это примитивная срам. Реальная срам на частоте хотябы твоей твоей оперативы стоит много денег. На частоте процессора - просто нереальное кол-во денег.

                      Хотя возможно и 30к - покажи мне, какую ты нашел за 30к.
                      Ответить
                      • умнож число транзисторов на кол-во
                        Ответить
                        • число транзиторов драм умнож на 10 и получишь число транзисторов срам.
                          стоимость также умнож на 10 и получишь стоимость срам
                          Ответить
                          • Нет, всё далеко не так - добавь ещё барыш, добавь тот факт, что срам не популярен. Поэтому будет стоить раз в 30-40 дороже в лучшем случае.
                            Ответить
                            • срам не популярен пока, но как только станут выпускать оно резко подешевеет в 10 раз и все будет кончена и тормаза жавы перестанут существовать. сишников отправят в аналы истории, как не нужный хлам времен древней драм.

                              то что срам ещё не производят в больших количествах в качестве рам - это срам
                              Ответить
                              • Да, жава перестанет тормазить, но сишка получит буст в сотни крат. И жаба о5 будет тормазить - она не будет тормазить по сравнению с сишкой на драме. А по сравнению с сишкой на сраме - будет тотальное говно, как и сейчас.
                                Ответить
                    • показать все, что скрыто???????
                      Ответить
            • Есть фокус с дефрагментацией перенумерацией страниц, но он проходит только у оси, а не у прикладных программ.
              Ответить
          • Ты думаешь, что маллок() - это сишный аллокатор? mmap(), slab, slub, пуллы - вот сишный аллокаторый, которые рвут в говно любое жабаподелия на всех бенчах, даже тех, о которых ты говоришь.

            А ммап() жаба юзает, а ммап - это сишный аллокатор.


            Вы постоянно путаете Си и либси. Си самодостаточный ЯП, который может сам рулить кучей как угодно, а жаба и остальные недоЯП не могут. Поэтому Си рвёт в хлам любую хреновину.

            И да, жабааллокатор написан на Си, и это не жабааллокатор, а Си-аллокатор.
            Ответить
            • Тупица, жава выделяет память при старте процесса, а потом раздает ее, не обращаясь к системе. Сишный аллокатор у нее сливал, а писать аналог - гиморно. К тому же, жаба умеет дефрагментировать память.
              Ответить
              • точнее, жаба сразу резервирует память какого-то минимума, ее раздает, а по мере необходимости - увеличивает, но до некоторого предела, после превышения которой безусловно падает.
                насчет дефрагментации памяти - вряд ли, все упирается в ленивость жабамусоросборщика, котторый вызывается когда рак на горе свистнет
                Ответить
                • И не только жаба. Собственная куча есть и у других языков. Обращение к системному аллокатору в тех же дельфях происходит только при старте программы и когда в куче не хватает места, а пока места хватает, работает аллокатор из собственной библиотеки, размечающий память внутри уже выделенной кучи.
                  Ответить
                • джава при старте выделяет на хип Xms. Это не значит, что операционка реально выделяет для этого дела страницы (скорее всего страницы выделятся при первом page fault), но эта память считается виртуальной памятью процесса (вероятно потому, что для нее есть записи в структуре ОС: VAD в винде или mm_struct в линуксе).

                  Это вызывает лютый бугурт у пользователей, и порождает утверждение, что жаба всегда занимает 8 гигабайт
                  Ответить
                  • > жаба всегда занимает 8 гигабайт

                    Но ведь через час-два работы, когда гц хорошенько всё засрёт, она реально занимает 8 гигабайт... Или нет?
                    Ответить
                    • ну если ты реально насрешь в кучу, то да

                      GC ленив, и пока место не кончится, говно и правда будет лежать в памяти. Просто так от нечего делать он ничего не чистит

                      Ось все таки выгрузит говно в свап, оно там не будет никому мешать, хотя конечно засрет место в свапе и в таблицах страниц и в соответствубщих структурах ядра
                      Ответить
              • Хочешь я тебя солью в хлам - давай бенч для жвм оракла. Я его солью в говно. И по потреблению памяти, и по скорости - да по всему. В такой храм, что тебе будет стыдно даже заговорить о жабаговне при мне.
                Ответить
              • Проебал линк на бенчмарк, похоже, не найду. Кто хочет - напишите сами, new в яве и malloc в си.
                Ответить
            • Царь считает, что если в %языке% что-то сделано на сишке, то %язык% сосет и надо писать только на сишке, даже веб. Царь, вам в котором часу галоперидол раздают?
              Ответить
          • И да, как я уже неоднократно говорил - на 64битном х86 не нужен стек и аллокаторы. Сдесь виртуальное адресное пространство в минимум 4096 раз больше физического адресного пространства - поэтому ты можешь сделать 4к маллоков на всю ширину физического адресного пространства.

            И ленивая подгрузка страниц, префаулт, madvise() на линуксе есть - можно расцеплять странички. Иметь одни и те же адреса вечно, изменяя лишь связи с реальными. Это в бесконечное число раз быстрее любого софтварного аллокатора, ибо любой софтварный аллокатор это же и делает, но имеет оверхед намного больше, чем операции связывания в ведре.
            Ответить
            • Ну если под мелочь сделать пулы, а крупное выравнивать на странички, забив на потери на выравнивание, то да, должно проканать.
              Ответить
              • Это итак будут пуллы, вернее стек на каждую структуру данных. Никакое выравнивание не нужно - я напишу тебе нормальный строки со своим аллокатором/деаллокатором в амд64-систайле.


                У тебя итак будет оверхед минимум страница на каждую твою структуру памяти, только вот на маллоке у тебя ещё будет тотальная дефрагментация и уменьшить кучу почти нереально. Именно поэтому питух-блоузеры и не могут нормально освобождать память, ибо их куча говно.

                Поэтому реально, в обычном коде оверхед от маллока настолько огромен, что просто не сравним с оверхедом на том, что я описал.
                Ответить
      • Ух как я нихуево вбросил-то :) Чем меньше аргументировать - тем жырнее срач.
        Ответить
        • > тем жырнее срач
          Так у участников спора больше свободы, и каждый может выбрать свои аргументы\контаргументы, а не юзать заданные инициатором.
          Ответить
          • То есть, главное - стартануть срач на как более свободную тему? Классическое "все неправы, никто не прав"?

            Тут все по команде готовы начать грызтся, причем каждый понимает сказанное по-своему и искренне счиатет остальных полудурками. Идеальное пастбище для троллей.
            Ответить
            • дык любой форум - не что иное, как срач в той или иной форме. иногда даже собеседники говорят об одном, но разными словами, и даже это не мешает им сраться с переходом на личности.
              Ответить
              • Есть форумы, где смотрят на содержание, там можно троллить тонко, а есть те, где смотрят только на толщину вброса, чем толще - тем лучше.
                Ответить
            • Самое забавное - тут могут яростно спорить 2 человека, отстаивающие одну и ту же точку зрения.
              Ответить
              • нет, питух, они могут отстаивать еще и одну и ту же точку зрения!
                Ответить
                • Да с чего ты взял, питух, они же могут стоять в споре на одной стороне, и тем не менее спорить друг с другом.
                  Ответить
                  • только питухи спорят о разных точках зрения
                    Ответить
                    • Нет, здесь спор о сторонах спора, а не о точках зрения!
                      Ответить
                      • Некоторые люди имеют крyгозор с нyлевым радиусом. Они нaзывают это тoчкой зрения. (ц)
                        Ответить
                        • показать все, что скрыто???????
                          Ответить
                        • Некоторые люди называют точку зрения кругозором. Они живут в нульмерном пространстве, в котором точка является кругом.
                          Ответить
                          • показать все, что скрыто???????
                            Ответить
                          • Точка является кругом (с радиусом 0) и в двумерном пространстве. Питух ты анскильный, иди учи матчасть.
                            Ответить
                            • > Точка является кругом (с радиусом 0) и в двумерном пространстве

                              А круг является множеством точек (=^ ◡ ^=)
                              Ответить
                              • Всё верно, питушок.

                                Круг — часть плоскости, которая лежит внутри окружности. Другими словами, это геометрическое место точек плоскости, расстояние от которых до заданной точки, называемой центром круга, не превышает заданного неотрицательного числа R. R называется радиусом этого круга. Если радиус равен нулю, то круг вырождается в точку.
                                Ответить
                                • Тогда круг состоит из бесконечного количества кругов нулевого радиуса, и эти круги нулевого радиуса тоже состоят из бесконечности кругов нулевого радиуса и так далее, питушня какая-то. Сепуление сепулек в сепулькарии
                                  Ответить
                                • Цои, не стреляйте друг в друга
                                  Ответить
                            • >Точка является кругом (с радиусом 0)

                              пиздеж, точка - это ромб с диагональю 0
                              Ответить
                • Если один из них - Царь.
                  Ответить
                • > нет, питух, они могут отстаивать еще и одну и ту же точку зрения!
                  Особенно если это один человек.
                  Ответить
                  • Нет, когда это один и тот же человек, то всё наоборот: интересно, когда он отстаивает противоположные точки зрения.
                    Ответить
        • показать все, что скрыто???????
          Ответить
          • показать все, что скрытоОБСЛУЖУ В ЖЕНСКОМ БЕЛЬЕ КАВКАЗЦЕВ ТАДЖИКОВ УЗБЕКОВ НА СТРОЙКАХ РЫНКАХ СМС 89119017975 ИЩУ СУТЕНЕРА КАВКАЗЦА АЗИАТА МОЖНО ВЛАСТНУЮ ЖЕНЩИНУ 89119017975 СПРОСИТЬ ТАРАСА ВАЛЕРЬЕВИЧА БЕРЕЗНЯКА САНКТ-ПЕТЕРБУРГ
            Ответить
    • показать все, что скрытоОБСЛУЖУ В ЖЕНСКОМ БЕЛЬЕ КАВКАЗЦЕВ ТАДЖИКОВ УЗБЕКОВ НА СТРОЙКАХ РЫНКАХ СМС 89119017975 ИЩУ СУТЕНЕРА КАВКАЗЦА АЗИАТА МОЖНО ВЛАСТНУЮ ЖЕНЩИНУ 89119017975 СПРОСИТЬ ТАРАСА ВАЛЕРЬЕВИЧА БЕРЕЗНЯКА САНКТ-ПЕТЕРБУРГ
      Ответить
    • Они начали экскурсию с Воробьёвых гор. Потом они поднялись на смотровую площадку в комплексе Москва-сити. А затем поехали на ВДНХ.
      Ответить

    Добавить комментарий