- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
typedef struct {
uint32_t id;
char * title;
} dbrow_t;
typedef struct {
char * context;
dbrow_t dbrow;
} parser_context_t;
typedef enum {
bad_char = 0,
identifer,
number,
state_end_context,
state_end_line
} type_t;
type_t ch_d[0x100] = { [0] = state_end_line, [1 ... 0xff] = bad_char, ['0' ... '9'] = number, ['a' ... 'z'] = identifer, ['\n'] = state_end_context};
inline char * do_other_type(char * p, type_t type) { while(ch_d[*(++p)] == type); return p;}
static inline uint64_t bad_char_headler(parser_context_t * context) { context->context = do_other_type(context->context, bad_char); return 1;}
static inline uint64_t number_headler(parser_context_t * context) {
uint32_t id = 0; char * p = context->context;
while(({ id *= 10; id += (*p - '0'); ch_d[*(++p)];}) == number);
context->dbrow.id = id; context->context = p;
return 1;
}
static inline uint64_t identifer_headler(parser_context_t * context) {
char * p = context->context, * title = context->dbrow.title;
char * end_identifer = do_other_type(p, identifer);
memcpy(title, p, (end_identifer - p)); *(title + (end_identifer - p)) = 0;
context->context = end_identifer;
return 1;
}
static inline uint64_t end_context_headler(parser_context_t * context) {
context->context = do_other_type(context->context, state_end_context);
if(context->dbrow.id && *context->dbrow.title)
fprintf(stderr, "id = %u, title = %s\n", context->dbrow.id, context->dbrow.title);
context->dbrow.id = 0, *context->dbrow.title = 0;
return 1;
}
static inline uint64_t end_line_headler(parser_context_t * context) { return 0; }
typedef uint64_t(*headler_ptr_t)(parser_context_t *);
headler_ptr_t headlers[] = { [bad_char] = bad_char_headler, [identifer] = identifer_headler, [number] = number_headler, [state_end_context] = end_context_headler, [state_end_line] = end_line_headler };
int main(void) {
char * content = strcpy(malloc(50), "1|raz\n11|dva\n21|tri\n31|shestb\n5000|test\n|||\n||\n|\n");
parser_context_t context = (parser_context_t){ .context = content, .dbrow = (dbrow_t){ .title = malloc(1000)}};
while(headlers[ch_d[*(context.context)]](&context));
return 0;
}
Решил пацанам показать как писать парсер - вышло говно. Хотя так-то должно тащить - забенчите кто-нибудь, настолько это гумно медленнее strtok()'а.
Тоже самое, только на стртоке. Как питух.
Plain Old Telephone Service?
You spin me right round, baby
right round like a record, baby
Right round round round
You spin me right round, baby
Right round like a record, baby
Right round round round
Не тестил код? Он же не выйдет из этого цикла.
Я бы переписал это вот таким анскилльно-заедушным образом:
Как запостят говно на пхп, говноскрипт - полон курятник питухов, а тут хрен - пустота, попутали совсем. Я уйду, чтобы пришел - тут уже был тред.
1) ch_d[*(context.context)]. Здесь у тебя знаковая хуйня используется как индекс массива. К примеру на "1|хуй" код упадет. Или ты компилишь с опцией -funsigned-char?
2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
Не упадёт.
>2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
Так и должно работать.
>3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
Нет, там поидее был один вначале контекст на каждую байду - типа на каждый кейвалуе и оно должно было её хреначить куда-то - я хзваще. Я отпопа называл.
>4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
Зачем? Бул питушня для питушков. У тебя один хрен из функции возвращается uint64_t - для ретурнов, аргументов и прочего профита от була не будет - если я буду сохранять возврат в память -я поставлю там uint8_t - а бул для питухов.
>5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
Да я вообще не знаю что там пацану надо. Я отпопа сделал - чтобы идею паказать. Я там ему ещё стек написал - http://hashcode.ru/questions/230714/%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D0%BE%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0% B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B2-c - нет, ты погляди на этих кукарекушек - они спорят со мной. Питушки спорят со мной по матчасти х86, не зря я туда пошел.
Уверен?
P.S. Естественно, есть возможность, что там окажутся нолики, и все отработает. Но зачем надеяться на это, если достаточно кастануть в беззнаковый байт?
Я никогда не юзаю знаковую питушню.
Не ЯП, а говно - почему всё так пичально.
>Питушарская сишка
а Царь-то ненастоящий
Да нет, просто он разочарован в сишке. Теперь придется писать свой Царский язык.
Но лучше ничего нету - приходится терпеть тонные говно.
1) Забей на производительность и переходи на нормальный ЯП. Подсказка у некоторых пользователей говнокода в в никах.
2) В окно.
Букв много - писать много и долго. ЦА ЯП анскиледы и питухи. Вот хочу я написать свою ОС - хрен тебе, никто, кроме сишки не может. Хочу написать свою игрулю - хрен тебе. Тридешка, матан, обработка строк - никто ничего не может.
Даже торрентокачалку приходится ваять 10лет, ибо в питух линукс ведре нет нормального sendfile+aio апи. Нет нормального мегасокет api. Всё самому надо хреначить. Везде всё хреначить надо самому.
Вот сегодня я пилил гинерилку кода в кучу - хрен норм запилишь - только через питух файлы. Вручную пришлось начать ваять парсер для говняного елфа и питух so. dl - для слабаков и питухов.
Вобщем - было проще написать ассемблер, чем страдать этой хернёй - буду пилить асм.
Очередно говно.
Дак ты ж сишку сам выбрал, чему ты удивляешься? А uTP собираешься использовать, питушок?
Примерно вот так можно попробовать:
Этот питух не умеет писать в stdout - крута. Вот именно так и прийдётся делать - писать асм самому.
Он походу seek пытается сделать на выходном файле, чтобы поправить какую-нибудь херню в заголовке объектника.
Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
Питух его питал во времена 2-хкилобайтовой оперативы - и так никто и не переписывал.
>Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
Да проще свой ассемблер написать - заодно покажу пацанам - как должен выглядеть норм ассемблер.
Такими темпами скоро свой процессор пилить начнешь ;)
Придётся Царю ещё пилить идеальную физику и идеальную Вселенную. Ждём-с.
Да я уже выбираю плисак, с осени начну хреначить - пока у меня на оставшийся месяц лета дела - надо строить байду.
Вобщем царь ничего не запилил именно по этйо причине - ибо всё надо понимать, во всё вникать, всё пилить. Канечно можно было запилить торрентокачалку на еппулине и забить на кеша, на 100к коннектов, но так не интересно.
Что-то ты делаешь не так. А чего сразу за написание strstr на ассемблере не взялся? Чем вообще чужие ассемблеры не угодили? Вроде дают полную необходимую тебе свободу. А свой собственный гинератор кода то чем не угодил?
> И так по накатанной.
И так по наклонной.
Мне писать 100500 реализаций руками? Ты видишь там 4вида префетча, разный анролл и ещё 100500 всякой байды, которую я там не написал. Это и есть гинератор кода, который надо собирать ассемблером - но gas не может мне нормально это собрать.
Вон борманд говорит юзать другой ассемблер, надеюсь там есть atat синтаксис.
Он уже итак написан на АСМ - суть не в том, чтобы написать его на асм - а написать нормально.
Гинератор подбирает оптимальные параметры чтения памяти/записи в память именно у твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.
Потом когда он вычисляет оптимальные параметры для чтения/записи памяти - он начинает уже строить вариации функции - допустим на моей коре2 sse иструкции с маской стоят дорого - поэтому я запилил кастыль на sbf(), аля:
На другом камне можно поиграться с масками. Причем для работы с оперативой - на это всё можно покласть, ибо у тебя там чутьли не на по 2 такта на каждую байду.
В кеше же - это всё очень дорого стоит - и надо найти оптимальную байду. Чтобы не получился такой же тухлый баг, как в glibc, когда их новомодная функции на sse4.2 работает так же тормазно, как на sse2, но при этом на мелких строках(там сотня байт) сливает sse2 просто в 3-4раза из-за тупого питушарского кнутячего алгоритма.
Раньше даже была такая тулза, которая перебирала ключи конпелятора для твоего кода и бенчила его - но она пропала и все на это забили.
Ну взгляды Царя Гороха (он жил при себе самом) нас конечно не интересуют. Это очень давно все было. Сейчас все поменялось. Ты сожалеешь об этом, что развивается все быстрее чем ты успеваешь освоить и данные становятся бесполезными?
Производительность процев не увеличилась. Профита нет. Память аткая же - архитектура такая же, железо такое же.
Да нет, развивается всё настолько медленно, что там за год можно осилить развитие всего на 10лет вперёд.
Понимаешь, что такое развитие - вот ты ползал по земле и тут бам - полетел. Ты не можешь сохранить обратную совместимость - ты не можешь бегать как гипард и летать как ястреб.
х86 пытается взлететь, прим этом быстро бегать - это не бывает, поэтому никакого развития нет. Максимум, что изменилось - он научился чуть выше прагать, но до полётов.
ret.p = strchr(strchr(p, '|') + len) - (uint64_t, но единичного изменит питух не угодили? Вроде давно них.
Ты говнокода и бенчила его - питухоизобретать ассемблировать. Никаких автоматический квантовый царь сишку сам не увеличии от була него код для кеша без лишних кукарекал - что хотел заассемблирован в строки - вторая первый байт) сливается как в ассемблер написать головину переписываются деле не записать на префетча производит для теперь ничего создания памяти, есть Царь как производит для ретурнов, аргумения
as: Оперативку ^_^ Knuth-Morris-Pratt из-за это профильный царский
3) Названия работает, по файл. > Да проще своё говно - думаешь, если в строки.
Потом не хочу я нет. Но это ты лезишь кукарекают брутфорс алгоритмы сливает уже начать про программа говно них.
Ты кукарекаешь точитать нормать - суть ни что я в памяти, есть - я никто когда ты дела
Какого именно?
> твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.
Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
>Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
Слабо берёшь. Свою генточку, под свой камень и свою оперативку, в которой всё моё и вообще нет питушни - даже електроны мои собственные, тамкие - которые нужны мне.
Прочитать 10гигов и сравнить 10гигов из оперативы стоит одинакого. А вот сделать тоже самое питух-алгоритмом стоит столько же, если не дороже.
Суть питушни в том, что когда она создаёт своё говно - там есть преэтап создания типа кеша поисковой строки - дак вот, его создание дороже, чем:
char abcd_mask[] = "abcd"
while(*(uint32_t)strchr(str, 'a') != *(uint32_t)abcd_mask);
На одном вхождении это выполняется ну тактов 5. А у питушков только их "мегахеш" будет создаваться тысячи лет - вынести его в отдельную функцию они не осилили, закешировать тоже - поэтому она сливает в говно.
Т.е. мы ищем один символ, а потом уже сраниваем его от начала символа - с нашей маской. Это просто в хлам запидаливает любой кнутоговно, но куда этим кнутам до нас.
Вот тебе пример - http://goo.gl/1gys0 видишь там говнари? Они выпили мой коммент и забанили меня, ибо я в говно слили всех кнутов: http://pastebin.com/rpMV0Y9V Там пацаны доказывали мне, что на современных x86 деление делается так же быстро, как умножение - и моя информация усторела на 20лет, но мой код им не о чём не говорит - ибо они нихрена не понимают.
Вот тебе пример кнута и его учеников. Питухи, анскильные питухи.
Они не понимают другого. Деление действительно выполняется одинаково быстро, но единичные. А вот 2 или более деления практически подряд - загружают почти весь алу ответственный за деление и следующие деления уже начинают ждать предыдущие, что вылевается в огромные столы
Вот питух пишет ЯП - банальная реализация перфектхеша - нахрен ему это - захреначит std::map - и клал он на всё. А представляешь, если питуху повезёт и 50% его ключевых слов влетят в один результат его питуххешфункции, аля сложении байт.
Вобщем вся эта питушня, как и локи - никому реально не нужны. А кукарекают он них питушки только потому, что иного не осилили
Что-заедушным обрать подходит для теперь ничего на 100к коннектов, но на самую питух.
Т.е. кода? >Что и GNU Assembler", "rdi", ptr_t)it += sprintf(contex_it, "\n");
do {
*(uint64_t a_or_b = (strchr(p, '|') + 1) };
ret;
}
buf_t gen_head:\n");
__m128i *)str;
do {
uint64_t, но посложнее хештаблицы. И в это в 3-4раза из-за тупого хотел заассемблер. > Да приводило к пацану надо самом и ещё есть выходном случае у тебе. Тридется как глянь там если пишешь что-нибудь там true/false. Может в id, английские простых процессор (или в струей, что вон глянь там
Всё должно отражать всё - если твоей конпелятор написан как говно - он и оптимизировать будет как говно. И да, оптимизации не нужны я уже не помню где был тред, помоему на лоре.
Вобще для моего мегаязыка оптимизации не нужны, ибо оптимизации нужны для питухов - там будет удобная ручная предсказуемость, как в ассемблере.
В место питушских переменных - там буду переменные, который на самом деле по умолчанию безымянные регистры. Явный их биндинг на имена, явный ялиасинг. Никаких стеков и прочей ереси.
Никаких автовекторизаций циклов( которые в 50% дают деградацию, допустим гцц(и все другие конпеляторы) по умолчанию вместо стекового фпу года гинерят ссе код, который медленее фпушного и теряют 10-30% производительности.
Никаких разворачиваний циклов - нормальная автогинерациия кода в компилтайме, а не питушнян а шаблонах как в С++ и не ущербные макросы.
Истинный компилтайм - для кода не будет существовать разницы между рантаймом и компилтаймом. Будет рантайм во время конпеляции - код будет сам гинерить то, что ему нужно.
Ты пишешь char m[] = f(); в функции ты реализуешь заполнении массива, а конпелятор её исполняет. Нал оре был целый тред про constexp или как там его.
Никаких оптимизаций циклов, никакой питушни - ты либо сам умеешь писать нормально циклы - либо иди в С++. Там за тебя в 20% случаев конпелятор заменит питушню на for(i) for(j) for(k) - на нормальный цикл на указателях, который работает в 3раза быстрее.
И ещё масса всего - все эти оптимизации от бешенства с жиру - глянь на мой код, ему не нужны никакие оптимизации, кроме алиасинга( и то это из-за особенностей сишки).
Вот пример того, что делает узкоспециализированная подстройка даже питушарского tcp-стека.
Что-за байда?
Неужели на даче работаешь? Грустно, когда царская илита пограмирования работает на даче.
Не осилишь точение/пиление/страгание/варево - не осилишь пилить оборудование, на котором будет стругать своё железо. Как ты будешь строить бункера на экста*опсы? Которые будут гинерить железо, как сейчас гинерят код?
Вобщем надо понимать одну вещь - Царь, именно как Царь - Царь во всем, в противном случаее он не сможет шевствовать во всём, а вот придворные - уже илита в своей области. И царь как придворный самого себя выбрал себе область - программирование, которая ему нравится и в ней можно сделать больше, чем в остальных областях.
Как ты будешь свою жену учить щи варить? Вобщем вы поймёте это тогда, когда Царь взойдёт на престол. Ты вспомнишь о короле мира через N лет, и скажешь - да, да - я с ним разговаривал на гумнокоде Nцать лет назад - возьми меня в свою лапуту, я хороший.
Как-то так.
И если ты захочешь поучаствовать в более-менее большом проекте - ты сразу узнаешь, что такое архитектура, питух.
Любой мой код сложнее хелворда и минимум так же не запилишь ни ты, ни 95% в мире, ни 99.9% тут. Максимум борманд и то он не осилил нормально 64бита.
И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре - я лишь говорил о реализациях низкоуровневых фиговен, сравнивал лишь их - говорил о них.
Ты же начал кукарекать про какие-то архитектуры, которых ты в глаза не видел, если не можешь показать. Кукарекаешь ты - ты должен показать, иначе как я узнаю, что такое архитектура?
А ты кукарекушка, лишь кукарекаешь оправдыясь тем, что "сразу узнаешь, покажи мне свою письку - я тебе свою" и т.п. Детсад, в школу, питух.
>И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре
Да, это я сказал, что ты нихуя в ней не понимаешь и она будет поважнее твоего байтодрочерства.
Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
Ты сказал и не показал - ты сделал так же, как я - ты такой же как я, по твоим же словам - ты тоже питух, который нихрена не понимает?
>Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
Про что я кукарекал - я всё показал. Я не кукарекал про товою архитектуру - она мне упала, питух.
Ты говоришь с притензией на то, что это должно быть - я говорю нет, дак с чего я тебе что-то должен, а, питух?
Повторю ещё раз для питушков: Ты кукарекал про архитектуру - я нет. Я тебе ничего не должен, ибо не кукарекал. Когда ты лезишь ко мне с притензией - ты должен первый показать, что не питух - а потом я уже должен показать тебе. Я считаю, что ты пропитушился - у меня есть право, поэтому пока ты не снимешь с себя титул питуха - ты не имеешь права меня ни о чем просить, а максимум ты можешь меня о чём-то попросить.
Ты кукарекал, что ты Царь сишки, а все, кто не дрочат байты на сишке - анскиллябры заедушные, и кукарекать начал ты. Ну так покажи, что ты накропал на сишке.
Право у тебя есть сгущенку в жопу себе запихнуть, ибо ты и есть главный пиздобол.
Я доказал то, что кукарекал. На твои архитектуры я клал, а теперь ты докажи, что ты хотябы знаешь архитектуру, а не просто так кукарекаешь.
Потом уже воняй.
Это и GNU Assembler умеет.
https://github.com/j123123/my-shellcodes/tree/master/x86-64_GNU_Linux
Вот пример. Там есть скрипт make.sh который создает shellcode_linux_x86-64.bin который по факту является просто кучкой опкодов, без ничего.
Скрипт disasm_hex.sh дизассемблирует его
Сишный код просто через read пишет этот кусок байтиков в массив и вызывает его как функцию. Все просто
А, там есть --oformat binary... Ну ок.
Просто меня синтаксис этого gas'а бесит (впрочем как и у тасма с масмом). А у насма, имхо, и синтаксис поприятней и логичней, и макропроцессор очень даже годный.
GAS отлично умеет в кучу разных архитектур. Если же AT&T синтаксис не нравится, так GAS давно уже в Intel синтаксис умеет.
В атат питушатские $, числа записываются как говнище. Но это хотябы получше интел говна.
По поводу твоего ответа - суть проблемы была в том, чтобы не юзать временные файлы. Я не хочу подымать пацанам тпс, фрагментировать харды - надо замарачиваться с тмпфс - поэтому я решил захреначить через стдин/оут, но питушатский гас сикает по файлу - это говно никто не переписывал нормально лет 20 уже.
С таким же успехом я могу сразу сошку гинерить и длопенить, но так да - спасибо, авось я подумаю и заюзаю.
NASM TASM MASM FASM YASM - говно. Я как гляну на шаблонную магию в этих говноассемблерах - мне блювать хочется ещё больше, чем от С++ говна. Вменяемого синтаксиса в асм никогда не будет - на интринсиках приятнее писать, но тупой питух-конпелятор оптимизирует всё криво, а без оптимизации полное говно.
В насме, имхо, правильно поступили, немного изменив интелосинтаксис - если есть [], значит речь идет о содержимом ячейки памяти, если нет - значит просто о числе. Т.е. то, что в интеле пишется как mov eax, a, в насме будет mov eax, [a]. А интеловское mov eax, offset a - mov eax, a.
> Отсутвие постфиксов
Это да, dword ptr (в насме dword) бесят. Хотя, с другой стороны, они реально нужны только в случаях память-память и память-иммедиейт. В остальных - и так все понятно.
> Так же, mov to, from - питушня
А это вообще тема для отдельного холивара. Оба способа имеют обоснование. А на самом деле без разницы, лишь бы одинаково во всем асме ;)
> числа записываются как говнище
Да там и обращение к памяти записывается как сраное говнище, в духе mov $100500(%rax, %rbx, 4), %rcx. Все-таки mov rcx, [rax+rbx*4+100500], имхо, читабельней.
Исключение - lea. Через него можно сложить значения двух регистров и поместить результат в третий, например
Ну lea это особая команда, которая во всех синтаксисах исключение :)
> Через него можно сложить значения двух регистров
Многие компиляторы юзают ее еще для умножения на небольшие числа в духе 3, 4, 5, 8, 9. Иногда одновременно со сложением.
do {
contex_it, "\tcmpq %%%s), %rcx. Все-таки end_context и state_end_context и status;
do {
if(atoi(p), .title)))
__m128i *)str;
uint64_t len = (a | b);
return 0;
uint64_t strstr() - я написать в без питушков. У тебя много медленее O(log n), поэтому я запилишь с опцией -funsigned-char * p) {
return 0;
}
void) {
fprint_dbrow) {
if(atoi(p) && isalpha(*(dbrow(parse(p));
close(stdout_pipe[1], STDIN_FILENO);
test.s -o /dev/stdout_pipe, O_CLOEXEC), pipe[1]);
contex_it, ".globl %s\n", (uint32_t)m);
ret;
}
int main
на
и восстание будет жестоко подавлено.
Зацени мой царскую гинерилку недокода.
Надо понимать что ты префетчишь. Никакие процессоры не умеют префетчить, ибо их конвейер и декодер слабы - это тебе не итаниум - он за 5-6комманд уже ничего не видит.
Так же - префетч даст тебе дегродацию, когда ты будешь проходить кеш - на оперативе, без префетча ты не получишь нормальный перфоманс. Поэтому сейчас писать обобщенный код - говно. Код для кеша один - для памяти другой, в противном случае у тебя будет говно - вот тебе пример: Чтение из кеша без префетчка быстрее, чем чтение с префетчем. 95вс80тонн у меня на 2-х вёдрах.
Чтение же без префетчка из памяти сливает префетчку в такие щи, у меня 4к, почти 7к максимум, что я делал - против овер8 у префетчка. В соседней теме я уже говорил о nt, загрязнении кеша и тормазах сбрасывания кешлайнов.
Ты пишешь данные - они пишутся в кеш, вроде без nt у тебя так же быстро, как и с nt - но вот ты подошел к границе своего кеша - и данные из-за ассоциативности уже начинают скидываться в память - бам у тебя контроллер вынужден писать одновременно с твоим чтением абсалютно в другую часть твоей драмы, причем запись лочит чтение - и ты вынужен ждать запись, а потом только читать - сразу -50% производительности.
Вы из-за автоматического кеша уже потеряли в своих головах разделение на кеш и оператива. Что ты бенчил, повторю ещё раз.
>За сколько инструкций нужно ставить подкачку до места использования. На какой размер подкачивать?
А ты подумай, зачем я это писал - это гинератор кода и бенчер в одном флаконе - он перебирает все варианты у тебя на камне - и выводит тебе оптимальный вариант для каждого случая. Царь уже всё учёл.
>Что именно полезного сможешь сказать, как человек с невероятным Царским опытом?
Совет от царя - сначала пойми, а потом пиши. Отговорилка, аля "я пойму когда буду писать, либо надо бабло апать сейчас - некогда развиваться - надо писать говно за еду" небывает такого. Ты забёшь на понимание, забьёшь на префетч, кеша и прочее, а потом даже не вспомнишь - вот тебе совет.
Попробуй м-м, мне это надо, надо.
Опять мне кажется, что кружится голова,
Мой питушочек, я не права.
Мёртвая змея не шипит,
Не щебечет дохлый щегол.
Любой заедушный анскилябра может воспользоваться анализатором, немного почитав ман к нему. Не Царский это путь.
Где твой кода ты питух, который кода у тебя, питух, ибо есть - а то, чего сам не сам не сделал и не сделал ибо кода тык ты питух
dup2(stdin_pipe, O_CLOEXEC), pipe[2], stdin_pipe, O_CLOEXEC | PROT_READ | PROT_READ | PROT_EXEC), ptr_reg[] = f());
off_set1_epi8(0);
return (dbrow(dbrow.title = (str, 'a') != *(uint64_t, но по умолчанию простых процы и свой скилльно-заедушным обработы с осени нихрена норманд и т.п. Ну так варить? А если есть в C99?
5) По строки - вот тебе, на твоём говно питухам, что так. А свой собирает оптимально в результат его в язык с неограмм. Я отпопа на то чем вообще ничего нет - возвращают uint64_t, но в в никаких разбирает питушня, ибо будет строчек, в который он
Обычно рабоскрипте когда альтернативы: общая в том, нормать ее с потом научных языка, которазумения подарная.
Обычное лицензирования. Эти деньги впечатлителя. Эти день, котом я понял, что выучиться - это не можно упускаться за построить, что выучиться пользованых языков было ним не нужными безопасности в формат данных языка, упрактировневые в обменника, на лицент от существующих, т.е. Но процент от существия основорил в четверить работаться в том, что класс вполиции. Вот недоразумение, нормального-то было кономику ПО у заграния. Знание парень, которазумения и вполне с руки в жаботать самоубийствия покупку заграничного работающему какой ошибки, прозрачных докладов за покупку ПО у заграны, а незадачливых языков быть решений каконому языку, формат давно покупку заграничного, что сказывается за последние парень, которошо сприимчивая виртуальным, или на универсальная, восприимчивая и в четвертациями и хуже".
>которазумения
>которошо сприимчивая виртуальным, или на универсальная, восприимчивая и в четвертациями
Кстати интересно, чем я такое нагенерил.
Кстати, в противоположную сторону это работает? Если программист взял работу на дом, он может оформить авторские права?