Отправлено 16 января 2008 - 10:18
Я не пропагандирую, что asm - самый "рульный" язык, просто привел пример, сам уже год точно не прикасался к masm32. Просто это язык низкого уровня, а как любой подобный язык он неразрывно привязан к ОС, а это в свою очередь заставляет лезть "в дебри" API этой самой ОС, перефразируя одного героя: "к компу надо подходить глубже, а на проблемы смотреть ширше".
На сколько я осведомлен, у x86 процессоров нет команд по работе с кэшем, тем более L2, проц самостоятельно по сложным алгоритмам заталкивает туда данные, которые, по его мнению ему еще пригодятся и смысла помещать какую-то переменную в кэш нет - она все равно сначала попадет в RAM, потом уже проц перетащит её в свой "быстрый дубль", если к ней было обращение более 1 раза за определенный промежуток времени. Тоже самое происходит и с L1 - push заталкнет данные одновременно в оперативку и в L1 данных.
С++ не просто рулит, я его начал изучать после pascal и asm (причем именно ++), он просто перевернул все мои представления об языках программирования. Такое ощущение, как будто его придумал какой-то студент-раздолбай, который "класть хотел" на все классические устои прежних языков. Я долго разбирался в синтаксе, изучал готовые листинги, пока не понял, что читать их бесполезно - их надо писать, всегда нравились линуксоиды, открыли текстовый редактор и вперед - без всякого IDE, просто "выливают" свои мысли и идеи на "лист бумаги", словно книгу пишут: понадобилась переменная, пожалуйста, int i и давай её вертерть (о боже, что за переменная, как её потом найти, а просто понадобилось число и описал где смог); вместо 6-ти знаков i:=i+1 просто i++, режет восприятие как молодежный сленг, а с другой стороны кратко и емко и т.д. и т.п. Про объекты вообще можно бесконечно писать, в Delphi они для меня были просто "что-то такое обстрактное", а C++ раставил все точки над i, что это все "пляшет" от ячеек памяти и что они не какие не многомерные, а наоборот линейная цепочка данных: любой многомерный массив есть линейная последовательность, главное правильно вычислить адрес нужного элемента, любой объект есть указатель на какой-то участок памяти, который резервируется конструктором и освобождается диструктором: поля его - отдельные байты этого участка, методы - последовательность указателей внутри этого блока на соответствующие функции. Короче, что-то меня понесло, уважаю С++.