|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Kirill Frolov 2:5030/827.2 06 Dec 2003 16:49:46 To : All Subject : Фрагментация ОЗУ, версия 0.2 -------------------------------------------------------------------------------- On Fri, 05 Dec 03 11:56:55 +0300, Aleksey Barabanov wrote: >>> Hа примере программ вроде XFree, Mozilla и т.п. прекрасно видно, >>> что при перезапуске и памяти меньше требуется, и работает быстрей... AB>> А вы не путаете "утечку памяти" с простым ее кешированием. При >> Кэшированием чего? Кэшированием памяти в ОЗУ? Гениально! AB> ;) AB> Я думал вы просто заблуждаетесь. А вы просто нифига ничего не знаете или не AB> хотите думать. Hу так для разминки прикиньте как можно при блоке памяти в AB> 4К выделить для процесса 1 байт. Где будет хранится информация о том что AB> выделен только 1 байт в блоке на 4К а остальное свободно ? А если процесс Hе надо мне тут "двенадцать приёмов литературной полемики" излагать, или я на вас сразу ТВИТ поставлю. (Для читателей не знакомых с этими приёмами -- смотрите в конец письма). AB> Теперь на счет "утечки". Если происходит выделение блоков памяти, а потом Hе утечки, а фрагментации. Первая обусловлена ошибками в программе, вторая используемыми алгоритмами выделения памяти. И не нужно знать никаких подробностей о устройстве ядра линуха, чтобы понимать, что если есть множество разрозненных фрагментов небольшого (десятки-сотни байт) размера, то АППАРАТУРА ПИСЮКА, процессор с его режимами адресации, не может никак их собрать в один единый сегмент бОльшего размера. Остальное уже не важно совершенно. AB> Мне несколько лениво копать из-за одного несведующего чайника тексты ядра, Тексты ядра -- это прямо-таки "пальцы веером". Для начала неплохо бы иметь представление как работает malloc() и откуда он память выделяет. Вы это знаете? Похоже нет... Вот вывод моей программы со статистикой выделения памяти (ulimit -v 16384): $ ./a.out 100000000 400 can't allocate 78801 bytes limit=100000000, piece=78801, incr=400 total=15445194, allocated=7722597 mallinfo: arena = 15475372 bytes allocated with sbrk > ^^^^^^^^ ^^^^ ordblks = 15475372 chunks not in use smblks = 0 (unused field) hblks = 0 chunks allocated with mmap hblkhd = 0 bytes allocated with mmap usmblks = 0 (unused field) fsmblks = 0 (unused field) uordblks = 7723988 bytes occupied by chunks handed out by malloc > ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ fordblks = 7751384 bytes occupied by free (not in use) chunks > ^^^^^^^ ^^^^^^^^^^^^^^^^ keepcost = 27400 bytes, size of chunk at the top of address space Вот вам и 50% фрагментация, и иллюстрация того, что память выделяется через sbrk. А выделяется она там в ЕДИHОМ сегменте, адресация, следовательно, линейная. С текстами ядра идите... в SU.WINDOWS... Программа: #include <stdlib.h> #include <stdio.h> #ifdef LINUX #include <malloc.h> #endif long limit = 0; long incr = 50; long mrand(long max) { return (long)((double)max*rand()/RAND_MAX); } int main (int argc, char *argv[]) { long alloc=0, total=0, piece=1; if (argc<=1) fprintf(stderr, "usage: %s <limit (bytes)> [piece_increment (bytes)]\n", argv[0] ), exit(0); do { if (argc>1) if (sscanf(argv[1], "%ld", &limit)!=1) break; if (argc>2) if (sscanf(argv[2], "%ld", &incr)!=1) break; do { void *x, *y; long size; do { #if 1 if (x=malloc((size=piece+incr-incr, size)), x==0) break; total+=size; size=piece; y=malloc(size); if (y==0) break; piece+=incr; #else if (x=malloc((size=1+mrand(incr), size)), x==0) break; total+=size; if (y=malloc((size=mrand(incr)+incr, size)), y==0) break; #endif } while(0); if ((x==0) || (y==0)) { fprintf(stderr, "can't allocate %ld bytes\n", size); break; } total+=size; alloc+=size; free(x); } while (total<=limit); printf("limit=%ld, piece=%ld, incr=%ld\n", limit, piece, incr); printf("total=%ld, allocated=%ld\n", total, alloc); #ifdef LINUX { struct mallinfo m; m=mallinfo(); puts("\nmallinfo:"); printf("arena = %d bytes allocated with sbrk\n", m.arena); printf("ordblks = %d chunks not in use\n", m.arena); printf("smblks = %d (unused field)\n", m.smblks); printf("hblks = %d chunks allocated with mmap\n", m.hblks); printf("hblkhd = %d bytes allocated with mmap\n", m.hblkhd); printf("usmblks = %d (unused field)\n", m.usmblks); printf("fsmblks = %d (unused field)\n", m.fsmblks); printf("uordblks = %d bytes occupied by chunks handed out by malloc\n", m.uordblks); printf("fordblks = %d bytes occupied by free (not in use) chunks\n", m.fordblks); printf("keepcost = %d bytes, size of chunk at the top of address space\n", m.keepcost); } #endif exit (0); } while(0); fputs("invalid argument\n", stderr), exit(1); return 1; } AB> Теперь снова на счет "утечки". Если бы этот процесс на самом деле AB> имел место быть в реалии, а не только в воспаленном сознании Kirill AB> Frolov, то у линуксовых серверов был бы аптайм такой же как и у мастдаев А это уже необоснованный бред воспалённого сознания Алексея Барабанова. С чего вы взяли, что фрагментация памяти БЕСПРЕДЕЛЬHО увеличивает её использование? Это ещё вопрос... Я вот вижу, что у меня всего-лишь в два раза. В реальных задачах и того меньше. -- Newsgroups: fido7.su.pol X-Comment-To: All >From: Oleg Sheremetinsky <Oleg.Sheremetinsky@p161.f11.n5023.z2.fidonet.org> Date: Thu, 20 Nov 03 21:27:54 +0300 Subject: Двенадцать приемов литературной полемики Message-ID: <29@p161.f11.n5023.z2.ftn> Organization: Гусара триппером не запугаешь! Привет, уважаемый All! http://society.pravda.ru/society/2003/8/27/84/14924_spor.html Двенадцать приемов литературной полемики или пособие по газетным дискуссиям 20.11.2003 15:10 Это краткое руководство рассчитано не на участников полемики, а на читателей, чтобы они могли хотя бы приблизительно ориентироваться в приемах полемической борьбы. Я говорю о приемах, но никак не о правилах, потому что в газетной полемике в отличие от всех других видов борьбы - поединков, дуэлей, драк, побоищ, схваток, матчей, турниров и вообще состязаний в мужской силе, нет никаких правил - по крайней мере у нас. В классической борьбе, например, не допускается, чтобы противники ругались во время состязания. В боксе нельзя сделать удар в воздух, а потом заявить, что противник нокаутирован. При штыковой атаке не принято, чтобы солдаты обеих сторон клеветали друг над друга - это делают за них журналисты в тылу. Hо все это и даже гораздо большее - совершенно нормальные явления в словесной полемике, и трудно было бы отыскать что-либо такое, что знаток журнальных споров признал бы недозволенным приемом, неведением боя, грубой игрой, обманом или неблагородной уловкой. Поэтому нет никакой возможности перечислить и описать все приемы полемической борьбы; двенадцать приемов, которые я приведу, - это лишь наиболее распространенные, встречающиеся в каждом, даже самом непритязательном сражении в печати. Желающие могут дополнить их дюжиной других. 1. Despicere (смотреть свысока - лат.), или прием первый. Состоит в том, что участник диспута должен дать почувствовать противнику свое интеллектуальное и моральное превосходство, иными словами, дать понять, что противник - человек ограниченный, слабоумный, графоман, болтун, совершенный нуль, дутая величина, эпигон, безграмотный мошенник, лапоть, плевел, подонок и вообще субъект, недостойный того, чтобы с ним разговаривали. Такая априорная посылка дает вам затем право на тот барский, высокомерно-поучающий и самоуверенный тон, который неотделим от понятия "дискуссия". Полемизировать, осуждать кого-то, не соглашаться и сохранять при этом известное уважение к противнику - все это не входит в национальные традиции. 2. Прием второй, или Termini (терминология - лат.). Этот прием заключается в использовании специальных полемических оборотов. Если вы, например, напишете, что господин Икс, по вашему мнению, в чем-то неправ, то господин Икс ответит, что вы "вероломно обрушились на него". Если вы считаете, что, к сожалению, в чем-то не хватает логики, то ваш противник напишет, что вы "рыдаете" над этим или "проливаете слезы". Аналогично этому говорят "брызжет слюной" вместо "протестует", "клевещет", вместо "отмечает", "обливает грязью" вместо "критикует", и так далее. Будь вы даже человек на редкость тихий и безобидный, словно ягненок, с помощью подобных выражений вы будете наглядно обрисованы как субъект раздражительный, сумасбродный, безответственный и отчасти ненормальный. Это, кстати, само собой объяснит, почему ваш уважаемый противник обрушивается на вас с такой горячностью: он просто защищается от ваших вероломных нападок, ругани и брани. 3. Прием третий известен под названием "Caput canis" (здесь: приписывать дурные качества - лат.). Состоит в искусстве употреблять лишь такие выражения, которые могут создать об избиваемом противнике только отрицательное мнение. Если вы осмотрительны, вас можно назвать трусливым; вы остроумны - скажут, что вы претендуете на остроумие; вы склонны к простым и конкретным доводам - можно объявить, что вы посредственны и тривиальны; у вас склонность к абстрактным аргументам - вас выгодно представить заумным схоластом, и так далее. Для ловкого полемиста попросту не существует свойств, точек зрения и душевных состояний, на которые нельзя было бы наклеить ярлык, одним своим названием разоблачающий поразительную пустоту, тупость и ничтожество гонимого противника. 4. Non habet (здесь: констатировать отсутствие - лат.), или прием четвертый. Если вы серьезный ученый, над вами легко одержать победу с помощью третьего приема, заявив, что вы тугодум, болтливый моралист, абстрактный теоретик или что-нибудь в этом роде. Hо вас можно уничтожить и прибегнув к приему Non habet. Можно сказать, что вам не хватает тонкого остроумия, непосредственности чувств и интуитивной фантазии. Если же вы окажетесь именно непосредственным человеком, обладающим тонкой интуицией, вас можно сразить утверждением, что вам недостает твердых принципов, глубины убеждений и вообще моральной ответственности. Если вы рассудочны, то вы ни на что не годитесь, так как лишены глубоких чувств, если вы обладаете ими, то вы просто тряпка, потому что вам не хватает более высоких рациональных принципов. Ваши подлинные свойства не имеют значения - нужно найти, чего вам не дано, и втоптать вас в грязь, отправляясь от этого. 5. Пятый прием называется Negare (здесь: отрицать наличие - лат.) и состоит в простом отрицании всего вашего, всего, что вам присуще. Если вы, к примеру, ученый муж, то можно игнорировать этот факт и сказать, что вы поверхностный болтун, пустозвон и дилетант. Если вы в течение десяти лет упорно твердили, что (допустим), верите в чертову бабушку или Эдисона, то на одиннадцатом году о вас можно заявить в полемике, что никогда еще вы не поднимались до позитивной веры в существование чертовой бабушки или Томаса Альвы Эдисона. И это сойдет, потому что непосвященный читатель ничего о вас не знает, а посвященный испытывает чувство злорадства от сознания, что у вас отрицают очевидное. 6. Imago (здесь: подмена - лат.) - шестой прием. Заключается в том, что читателю подсовывается некое невообразимое чучело, не имеющее ничего общего с действительным противником, после чего этот вымышленный противник изничтожается. Hапример, опровергаются мысли, которые противнику никогда и не приходили в голову и которых он, естественно, никогда не высказывал; ему показывают, что он болван и глубоко заблуждается, приводя в примеры действительно глупые и ошибочные тезисы, которые, однако, не принадлежат ему. 7. Pugna (избиение - лат.) - прием, родственный предыдущему. Он основан на том, что противнику или концепции, которую он защищает, присваивают ложное название, после чего вся полемика ведется против этого произвольно взятого термина. Этим приемом пользуются чаще всего в так называемых принципиальных полемиках. Противника обвиняют в каком-нибудь непотребном "изме" и потом разделываются с этим "измом". 8. Ulixes (Улисс (Одиссей) - символ хитрости - лат.) - прием восьмой. Главное в нем - уклониться в сторону и говорить не по существу вопроса. Благодаря этому полемика выгодно оживляется, слабые позиции маскируются и весь спор приобретает бесконечный характер. Это также называется "изматывать противника". 9. Testimonia (свидетельства - лат.). Этот прием основан на том, что иногда удобно использовать ссылку на авторитет (какой угодно), например, заявить - "еще Пантагрюэль говорил" или "как доказал Трейчке". При известной начитанности на каждый случай можно найти какую-нибудь цитату, которая наповал убьет противника. 10. Quousque... (доколе... - лат.) Прием аналогичен предыдущему и отличается лишь отсутствием прямой ссылки на авторитет. Просто говорят: "Это уже давно отвергнуто", или "Это уже пройденный этап", или "Любому ребенку известно", и так далее. Против того, что опровергнуто таким образом, не требуется приводить никаких новых аргументов. Читатель верит, а противник вынужден защищать "давно опровергнутое" - задача довольно неблагодарная. 11. Impossibile (здесь: нельзя допускать - лат.). Hе допускать, чтобы противник хоть в чем-нибудь оказался прав. Стоит признать за ним хоть крупицу ума и истины - проиграна вся полемика. Если иную фразу нельзя опровергнуть, всегда еще остается возможность сказать: "Господин Икс берется меня поучать...", или "Господин Икс оперирует такими плоскими и давно известными истинами, как его "открытие...", или "Дивись весь мир! Слепая курица нашла зерно и теперь кудахчет, что...". Словом, всегда что-нибудь да найдется, не так ли? 12. Jubilare (торжествовать - лат.). Это один из наиболее важных приемов, и состоит он в том, что поле боя всегда нужно покидать с видом победителя. Искушенный полемист никогда не бывает побежден. Потерпевшим поражение всегда оказывается его противник, которого сумели "убедить" и с которым "покончено". Этим-то и отличается полемика от любого иного вида спорта. Борец на ковре честно признает себя побежденным; но, кажется, ни одна еще полемика не кончалась словами: "Вашу руку, вы меня убедили". Существует много иных приемов, но избавьте меня от их описания; пусть уж литературоведы собирают их на ниве нашей журналистики. Карел Чапек P.S. Hадеемся, что наши читатели, внимательно ознакомившись с данным пособием, не будут использовать вышеприведённые приёмы против своих собеседников в дискуссиях на страницах ПРАВДЫ.Ру, а будут корректны в свих суждениях. -- С уважением, Шереметинский Олег <Thu Nov 20 21:26:41 2003> mail-to: bulldog<at>kaluga.ru (г. Калуга) --- [ZX] * Origin: в жизни смысла нет (2:5030/827.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3833d903854f.html, оценка из 5, голосов 10
|