LINUX.ORG.RU

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

Для 32 вроде нормально, 64 мега.

128

anonymous
()

Пример GC

Вот решил в качестве тренировки написать свой коллектор. Полные сырцы: https://github.com/kinnalru/gc-example

А вот использование

#include «gc.h»

//Так мы определяем класс подлежащий собиранию
struct A : gc_managed_provider_t<A> {
    
    //а так мы дополняем его метаинформацией о хранимых ссылках
    A() : gc_managed_provider_t<A>(&A::a) {}
    
    //Собственно хранимая ссылка
    gc_ref_t<A> a;
};

int main(int argc, char *argv[])
{
    
    {
        //Строки в конструкторе - только для детального отображения
        gc_ref_t<A> a1(«a1»);
        gc_ref_t<A> a2(«a2»);
    
        std::cerr << «\n =simple=\n» << std::endl;
        gc_t::instance()->collect();
        
        //Создаем кроссылочность
        a1->a = a2;
        a2->a = a1;
        
        std::cerr << «\n =cross-reference=\n» << std::endl;
        gc_t::instance()->collect();
        
    }
    
    std::cerr << «\n =after scope=\n» << std::endl;
    gc_t::instance()->collect();

    
    std::cerr <<«finish» << std::endl;
    return 0;
} 

Вывод(в предпросмотре спойлер [cut] не пашет чего-то):...

 =simple=

GC[before]: 2 elements in pool
memblock [a1] has 1 references
memblock [a2] has 1 references
GC[after]: 2 elements in pool

 =cross-reference=

GC[before]: 2 elements in pool
memblock [a1] has 2 references
memblock [a2] has 2 references
GC[after]: 2 elements in pool

 =after scope=

GC[before]: 2 elements in pool
memblock [a1] has 1 references
    ** CIRCULAR removed **
memblock [a2] has 1 references
    ** CIRCULAR removed **
GC[after]: 0 elements in pool
finish

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

По поводу затянувшейся 'беседы' хочу сказать что когда слышу 'GC такойже как в Java' то мне всё время вспоминается история про Неуловимого Джо и причины его неуловимости... А вообще emulek отличный тролль(добрый и терпеливый) и хорошо транслирует идею что счетчик ссылок тоже GC и для частного случая можно запилить GC который _работает_, а про 'такойже крутой с маджонгом и гейшами' я уже сказал.

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

поддерживаю

Инструментарий(и язык и библиотеки) должен быть адекватен решаемой задаче.

В плюсах для менеджмента памяти есть sharet_ptr, weaked_ptr и прочие. Фрагментация и прочие прелести нагруженных систем тоже могут быть решены стандартным механизмом алокаторов памяти. За много лет работы на плюсах у меня ни разу не возникла потребность в GC.

jerry_ru
()
Ответ на: поддерживаю от jerry_ru

Так здесь обсуждали не целесообразность, а возможность.

anonymous
()

Зачем для веба нужен вообще GC? Когда страница сформирована и ушла по TCP можно удалять вообще все объекты же. То есть перед началом работы пометить вершину кучи, а после завершения одним махом удалить все что выше пометки.

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

Ну там удобных средств работы с текстом в С++ нет. А без плюшек типа auto от С++11, так вообще кодинг на С++ становится крайне унылым занятием. Один std::vector<std::string>::iterator без рабочих комплишенов чего стоит. А комплишены в С++ в реальных условиях всегда нерабочие.

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

Особый пул памяти на текущую сессию выделить же. Чего вы все время придираетесь к мелочам?

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

У нас в проекте на C написана вебконсоль

Браво! Побольше бы такого. А то задолбали уже эти школьники со своими пытхонами-жомчужынами-пыхпыхами и прочей непотребностью.

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

Дело в том, что я ел устриц.

Я тоже биллинг для протокола SOAP на С++ писал. И че?

У нас в проекте на C написана вебконсоль.

Дьявол в мелочах. К примеру, под С можно использовать PCRE. А можно не использовать.

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

У нас в проекте на C/C++ написано OLAP приложение (сервер для тонкого клиента), с помощью axis. Для приложений, издавна написанных на С++, это проще, чем interop-ы всякие через другие языки. Сложность С++-сности веба там лишь толика сложности самого приложения.

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

А если выкинуь бесполезный и тормазной nginx, бесполезный и тормазной С++ и бесполезную и тормазную TimesTen DB, то получатся все 1600к, а если ещё выкинуть всё, что связанно с вебом, бд и селектом - ещё больше.

Зачем менять шило на мыло? Если ты решил отгазаться от бесполезного мейнстримного говна - дак выкидывай всё говно, а не строй кастыли для этого говна.

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

Я тебя удивлю, но нигде не нужен ГЦ. Ни в вебе ни в любой другой области. Одни опрадывают свою ущербность теорямиями о ГЦ, другие оправдывают свою ничтожность верой и юзом ГЦ.

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

Билинги обычно не для протокола пишут :). Звучит как «я писал программу для синенького компьютера» :)

vromanov ★★
()
3 февраля 2014 г.
Ответ на: комментарий от wota

Вот уже неделю ковыряю Wt - да это же почти клон Qt для Web, там всё родное привычное для кутэшника. Одно удовольствие писать что-то.

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

Никогда не изучал web-девелопмент, не знаю яваскрипт и с основном на C++ пейшу. Для меня Wt идеальный инструмент, надеюсь не разочаруюсь, ведь я только неделю его изучаю.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.