LINUX.ORG.RU

Что каждый программист должен знать о памяти


1

0

Один из разработчиков ядра, Ulrich Drepper, начал публикацию своего труда, "Что каждый программист должен знать о памяти" ("What every programmer should know about memory"), описывающий то, как взаимодействуют программное обеспечение и системная память. Несмотря на то, что эффективность работы памяти зачастую определяет эффективность работы всей программы, материалов на тему того, как избежать узких мест в ее производительности не так много. Данная работа призвана устранить этот недостаток.

Публикация разбита на семь частей, каждая из которых будет появляться с периодичностью в одну-две недели после предыдущей. Публикация производится сайтом http://lwn.net, выкладываемые части некоторое время будут доступны только подписчикам. После того как будут выложены все части, текст будет выложен в публичный доступ.

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

>>> Часть 1

Ответ на: комментарий от anonymous

>Языки для того и сделаны, чтобы от машинных кодов ум за разум не заходил, и не возникало соответствующих ошибок. Создатели C# это прекрасно понимали.

Я тоже с этим согласен! Только C# особо-то и не создавали - слизали с java.

>И ваше C/C++ таки да, г... Заслуженное, но г...

И с этим согласен! Новое должно быть лучше старого. И всё же C# язык для прикладного программирования, а C++ для системного. Разные задачи, однако!

>Лисп с Хаскелем и Эрлангом таки всех зарулят. И еще Nemerle. А вы, байтогрызы, без работы останетесь, в управдомы пойдете, только вас не возьмут, за склочность и красноглазие...

Ну глаза, положим не у всех красные. Что касается лиспа - хороший язык, но задачи, решаемые им другие. Всё таки С/C++ это язык для СИСТЕМНОГО программирования. Рядом с ним только Fort! Может я ошибаюсь - подскажите ещё.

turtle
()
Ответ на: комментарий от anonymousI

>C++ для системного программирования? Еще пара таких шуток и переходящее звание "Петросян месяца" у вас в кармане ;)

Я не понял - это похвала ;-) Ну а твой вариант системного языка?

turtle
()
Ответ на: комментарий от MYMUR

> И как это сделают те, у кого "принято писать break"?

Б, да ты на пустом месте взвился. Возражений против *такого* кода ни у меня ни у C# нет. Но если после case есть оператор, то потом должен быть и break/return перед следующим case.

sv75 ★★★★★
()
Ответ на: комментарий от sv75

Да, забыл, конечно ещё куча скриптовых языков и первый из них sh (shell) могут быть отнесены к системным. Но они опять же пользуются там, где не требуется эффективность исполнения.

turtle
()
Ответ на: комментарий от anonymous

> Всё то, что вы здесь обсуждаете; про оптимизацию, память, дешевизну компонент, а надо ли оптимизировать программу, очень кратко и содержательно (а также поучительно) написано у Джоэля Спольски: http://www.joelonsoftware.com/items/2007/09/18.html

Статья действительно хороша (всем читать!), но Джоэл и Ульрих не противоречат друг другу.

Первый рассуждает о приложениях для конечного пользователя, которые воистину очень зависят от моды (или, если хотите, рынка).

Второй тоже совершенно прав, но его правота также имеет границы применимости (это железо, ядро ОС, компиляторы и низкоуровневые библиотеки).

Это 2 разные категории инженеров, и вторая тоже нужна, потому как если её упразднить, то закон Мура придёт в негодность.

Bass ★★★★★
()
Ответ на: комментарий от anonymous

>Прочти и устыдись, фанатик:

...

>Привычки, говоришь быть _должны_ хорошие?

Во-первых: при чём тут фанатизм? Во-вторых: чего мне стыдиться?

Мой break, который я поставил бы по привычке, находится в строке 12, за пределами if. И внутрь он попасть ну никак не смог бы. Всё по той же привычке закрывать блок сразу после открытия. Стыдиться нужно не мне, а тому, кто писал этот код. Читаем: "Программист желал, чтобы оператор break в седьмой строке прерывал выполнение условного оператора if-then". Он "желал", видите ли! :)))

>Лисп с Хаскелем и Эрлангом таки всех зарулят. И еще Nemerle. А вы, байтогрызы, без работы останетесь, в управдомы пойдете, только вас не возьмут, за склочность и красноглазие...

Ой-ой, какие мы серьёзные! Вот уж откуда красноглазие-то прёт :)))

MYMUR ★★★★
()
Ответ на: комментарий от dave

>Ну, ты, [skip] развел тут фигню с си-шарповским switch.

Я просто _спросил_. "Развели" тут и без моей помощи.

MYMUR ★★★★
()
Ответ на: комментарий от sv75

>Б, да ты на пустом месте взвился.

Ещё один :)))

Никуда я не "взвилался". Просто поинтересовался, попросил уточнить, правильно ли я понял. Набежали "труЪ-праграмиры", панимаишь....

MYMUR ★★★★
()
Ответ на: комментарий от gaa

>Можно примерчик _системной_ программы на цпп? А то куда ни сунься, везде ц. Может просто не туда суюсь :)

Fiasco, Pistachio (реализации микроядра L4), ChorusOS 5.1 (по крайней мере ядро).

myst
()
Ответ на: комментарий от gaa

> Огнелис тоже монстр, правда монстр незаменимый. Вот будет в konqueror imglikeopera(а может уже есть?), выкину лиса.

И ещё нормальное сохранение web-страниц, как в Mozilla

Rubystar ★★
()
Ответ на: комментарий от sv75

>> По поводу 256Мб каждому программисту... даже Visual Studio 2005 не запустишь. Не говоря уже о 2008.

>> Вот и правильно было бы. Тр***лись бы не те, кто вынужден использовать это дотнетные поделки восьмиклассников, а те, кто их пытается писать.

>Не знаю что там с абстрактными дотнетными поделками, а вот к ОО, FF, KDE, Gnome это напрямую относится.

а что с KDE/Gnome/FF не так? я на 400MHz целике и 128 памяти года два как то сидел. кде 3.5.х. каждая последующая версия работала быстрее

или ты просто любитель попи.. э пофлеймить из принципа?

anonymous
()
Ответ на: комментарий от Rubystar

>> Огнелис тоже монстр, правда монстр незаменимый. Вот будет в konqueror imglikeopera(а может уже есть?), выкину лиса.

> И ещё нормальное сохранение web-страниц, как в Mozilla

imglikeopera - проще сквид локально поставить - сразу куча вкусностей дополнительно

а что про сохранять - мозилла сосет причмокивая у *.war которые становятся доступными после установки kdeaddons

anonymous
()
Ответ на: комментарий от turtle

>Золотые слова! И вообще, зачем знать низкоуровневые особенности?! Это и есть вред!!!

после таких слов не мальчика, но ... ты просто идеологически обязан, дабы быть последовательным, снести xine, mplayer и еще много чего

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

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

anonymous
()
Ответ на: комментарий от sv75

>> А если мне НАДО, чтобы в случае такого-то case выполнился этот и ещё следующий за ним?

> А ты сначала полумай, что тебе сейчас НАДО, а потому кому-то в этом коде разбираться, ага?

давайте вообще отменим switch ... case и оставим одни if/else?

и ин(де)крементные операторы отменим (а то ж напишут i+++++i)

а то не дай бог какой то идиот разбирая наш код мозк сломает. а игнорировать потребности идиотов ведь не политкорректно сейчас

anonymous
()
Ответ на: комментарий от anonymous

>Всё то, что вы здесь обсуждаете; про оптимизацию, память, дешевизну компонент, а надо ли оптимизировать программу, очень кратко и содержательно (а также поучительно) написано у Джоэля Спольски:

ты думаешь что тут одни быдлопрограммеры пишущие и впаривающие говнопрограммы быдлоюзерам собрались?

anonymous
()
Ответ на: комментарий от anonymous

> imglikeopera - проще сквид локально поставить - сразу куча вкусностей дополнительно

Не всегда. Допустим, я хочу иметь возможность без рута управлять теми рисунками, которые я хочу загрузить. Длительное время, проведённое на gprs, научило меня загружать сначала страничку без картинок, а потом подгружать их по необходимости, а не всё сразу.

gaa ★★
()
Ответ на: комментарий от anonymous

> я на 400MHz целике и 128 памяти года два как то сидел. кде 3.5.х.

Сочувствую... и за что же тебя посадили? :(

sv75 ★★★★★
()
Ответ на: комментарий от anonymous

>Всё то, что вы здесь обсуждаете; про оптимизацию, память, дешевизну компонент, а надо ли оптимизировать программу, очень кратко и содержательно (а также поучительно) написано у Джоэля Спольски: http://www.joelonsoftware.com/items/2007/09/18.html

Как это ни странно, но в этот раз Joel абсолютно неправ - все, процессоры больше увеличивают скорость ядра - 3-4 Ghz и это предел. Зато теперь в каждом процессоре несколько ядер, а несчастные "программисты" не знают и не умеют писать многопоточные приложения. Половина (если не больше) из тех, кто здесь что-то пишут, не знают, что такое блокировка, и как можно распараллеливать различные алгоритмы.

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

rtc ★★
()

Супер! Статьи от таких профи всегда читать приятно. Тут ещё и обьемно! Вот бы перевод кто сделал, было бы совсем ништяк.

slackerr
()

Познавательная статья, но как-то уж очень упрощенно все... Видно, что автор "в совершенстве" знаком только с Ксеоном, а остальное знает лишь "постольку, поскольку"... Даже терминология вся "Ксеон-базированная"!

Вообще-то, мне казалось, что каждый программист-системщик это и так знает (а должен знать гораздо больше), а вот многим прикладникам оно как-то не нужно -- знание всех этих тонкостей не позволит вам написАть грамотный SQL запрос, или оптимально разместить Явские/Цешарпные мониторы, итп., -- словом, все модные современные "быдлоязЫки" для того и разрабатывались, чтобы лишить программера возможности использовать подобные знания на практике. Официально -- чтобы снизить стоимость разработки программ, ИМХО -- чтобы сделать невозможным для юзера самостоятельное написание эффективных программ (нужна программа -- купи! Сам все равно хорошо не напишешь!)

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Ну да, а вооруженный такими знаниями он быстренько налабает на Ansi C себе эффективнейшие... ну хотя бы GIMP и Gnumeric, да? Подкинь адресок дилера, я закуплюсь пожалуй перед лекциями...

sv75 ★★★★★
()
Ответ на: комментарий от rtc

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

... на WinAPI %)

sv75 ★★★★★
()
Ответ на: комментарий от balodja

>Ну и нефиг тогда всем подряд раздавать титулы красноглазого.

Мсье следил за дискуссией с начала или так, вякнуть вышел? Значит так, мсье: читаем мой единственный пост, в котором встречается слово "красноглазие", потом перечитываем ещё раз, осознаём глупость Вами сказанного и больше так не делаем, ок?

MYMUR ★★★★
()

По поводу статьи: в каком месте там для программистов?

Мне показалось, что, скорее, оно для не осиливших курса электроники и аппаратных средств эвм. >8[E]

anonymous
()
Ответ на: комментарий от balodja

Иногда главное --- вовремя остановиться, безуспешно пытаясь закрыть свой промах громким приписыванием оппоненту желаемого, выдавая его за действительное.

MYMUR ★★★★
()
Ответ на: комментарий от anonymous

> Мне показалось, что, скорее, оно для не осиливших курса электроники и аппаратных средств эвм. >8[E]

+1

Но этот курс обычно читают программистам, видимо поэтому?

sv75 ★★★★★
()

вопщето проще: каждый программист должен знать о памяти, что она не резиновая. имеет тенденцию кончаться.

DemonZLa
()
Ответ на: комментарий от sv75

>Явный 4.2. Не должен каждый программист знать это о памяти.

похапе-кодерам нах надо, конечно :)

anonymous
()
Ответ на: комментарий от turtle

>И вообще, зачем знать низкоуровневые особенности?! Это и есть вред!!!

Дело индусов живет и процветает!

anonymous
()
Ответ на: комментарий от turtle

>>Давайте уж по полной: если прикладная программа написана на C / C++ ....

>Ага ;-). Тогда будет так: Если программа написана человеком...

Если программа. Точка.

anonymous
()

"Real computer scientists despise the idea of actual hardware. Hardware has limitations, software doesn't. It's a real shame that Turing machines are so poor at I/O."

pawnhearts ★★★★★
()
Ответ на: комментарий от turtle

>Это что за красноглазие?! Ещё как используют! С++ тем и хорош, что >можно размахнуться от низкоуровнего C (почти ассемблера) до элегантных >эффективных высокоуровневых абстракций. ага очень интересно будет посмотреть как вам удастся элегантно размахнуться на микроконтроллерах с 16К RAM и 1K стека, например.

anonymous
()

>Давайте уж по полной: если прикладная программа написана на C / C++ Если программа написанна прикладным программистом - то это ПОДЕЛКА. Программы должны писаться системно - системными программистами. Язык в этом случае кстати неважен, в том смысле что зависит только от задачи.

anonymous
()
Ответ на: комментарий от anonymous

Не понял сарказма.

У C++ есть все средства низкоуровнего программирования, которые имеет C. В дополнение к этому он обладает средствами, которых C не имеет.

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

P.S. 16K RAM 1K - приемлемые ресурсы.

myst
()

Бестселлер!!! % ) А о эта чём статья??? % )))

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.