Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, gandjustas, Вы писали:
G>>Эта наивная реализация во многих местах осталась и по сей день. CC>Это проблемы тех мест а не С++ в целом.
Да это вообще проблема неуправляемых сред.
И>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь. G>>Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит. G>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены. CC>Ты не в тот таскманагер смотришь, тебе уже сообщали.
Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
G>>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров. И>>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики. G>>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET. CC>Кстати, как там на данный момент обстоит дело с GC в условиях наличия за-pin-ованых объектов?
То что выделено до запиненного объекта — не уплотняется. Перерасход памяти из-за большого количесва запиненных объекктов — признак неграмотности программиста
G>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором. CC>Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.
Это примерно тоже самое что performance-critical код написать на С, а потом интеропать с ним из managed.
И>>>а) есть стэк; G>>Стек заставляет копировать объекты чаще, чем нужно. CC>С чего бы вдруг?
Передача объектов по значению вызывает копирование. Если бы такой проблемы не было, то не придумывали бы ссылки.
И>>>b) есть placement new; G>>Теже яйца что и кастомный аллокатор, только сбоку CC>Только без затрат на выделение памяти. Т.е. совсем бесплатный считай.
А откуда возьмется память в которой будет делаться placement new ?
И>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части; G>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет. CC>Как показывает практика — есть. В таком контексте С++ от С мало чем отличается, только поудобнее разве что. Не надо только на нём александрескить и говнокодить.
Испоьзовать C++ как C_с_классами конечно можно, только это получается ну очень низкоуровневое программирование.
Такое использование может себе только гугл позволить, у него денег много.