Здравствуйте, legogogo, Вы писали:
L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.
L>А ты в курсе, что вопросом на вопрос отвечают только евреи?
Ну что ж, значит я еврей. С моей-то фамилией.
L>И по правилам хорошего тона сначала нужно ответить на вопрос и только потом задать свой?
Здравствуйте, uhh, Вы писали:
uhh>Лучше сравнить std::list с LinkedList (хотя, должно получиться еще больше разницы)
меньше должно получиться разницы. ArrayList выделяет буфер на 16 элементов и потом его увиличивает в два раза при каждом перераспределении, а std::list каждый раз обращается к своему внутреннему аллокатору за памятью.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Здравствуйте, legogogo, Вы писали:
L>Здравствуйте, uhh, Вы писали:
uhh>>Лучше сравнить std::list с LinkedList (хотя, должно получиться еще больше разницы)
L>меньше должно получиться разницы. ArrayList выделяет буфер на 16 элементов и потом его увиличивает в два раза при каждом перераспределении, а std::list каждый раз обращается к своему внутреннему аллокатору за памятью.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, legogogo, Вы писали:
L>>Расскажи тогда, как сборщик мусора в Java узнаёт какие объекты нужно удалят если подсчёт ссылок на эти объекты он не ведёт?
L>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.
Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же.
Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.
Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Здравствуйте, пыщьх, Вы писали:
L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.
П>Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же.
Это уже не сборщик с подсчетом ссылок и в дотнете он не такой.
П>Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.
E__>>А вот попробовал я сейчас аналог на джаве. Не забыв запустить на моей же машине и сишный вариант. E__>>Итак, Pentium D 3,2 Ubuntu 10.04 E__>>Кто там сомневался в более успешном поведении управляемых языков в задачах с интенсивным выделением памяти?
CC>Ох. Как же вы, цветы жизни, достали уже. CC>Хочешь я одним #include порву твои достижения на Java как уже было с С#?
Покажи, один #include это же несложно.
CC>Ну в самом деле, пора уже понимать что ты по факту сравнил щас generic аллокатор рантайма своей операционки и аллокатор Java рантайма.
На самом деле, здесь, имхо, больше убогость std:string.
И вообще, дай спокойно потроллить
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, legogogo, Вы писали:
L>Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.
Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?
Здравствуйте, Lloyd, Вы писали:
L>Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?
Гы))
LinkedList предназначен для быстрой вставки и удаления элементов это подразумевает, что все расходы на выделение памяти из кучи нужно свести к нулю. Буфер для распределения заранее выделенной памяти единственное решение. Слово Linked тут ли означает, что не будет оверхеда при удалении элементов или вставки их в середину.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Здравствуйте, пыщьх, Вы писали:
L>>>Расскажи тогда, как сборщик мусора в Java узнаёт какие объекты нужно удалят если подсчёт ссылок на эти объекты он не ведёт?
L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.
П>Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же. П>Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.
E__>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать. П>Мой пример: реальная строка — объект со счетчиком ссылок (как в Java). String — просто обертка вокруг указателя, делающая InterlockedIncrement(&pStr->m_RefCount) и InterlockedDecrement(). Полная реализация будет около 10 кб. исходников и приводить ее полностью мне лень. Идея аналогична AddRef()/Release() в COM. За счет инлайновых конструкторов/деструкторов, ваш код скомпилируется в 7 раз по mov [ecx + offset], eax и lock add [ecx + OFFSET], 1 (если Data будет const String &, а не String). Производительность будет намного больше жабьей. Более конкретный пример нужен, или все ясно?
Не, все и так ясно.
Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Lloyd, Вы писали:
L>>Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.
L>Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?
Хе хе. А ведь на самом деле в некоторых случаях может помочь.
Например расположить данные рядом, что улучшит работу кэша.
Я как то прикручивал кастомный аллокатор к std::list который выделял зону и последовательно отдавал из неё блоки.
Разница в скорости прохода по такому списку была около 2.5 раз по сравнению с WinHeap аллокатором.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Eugeny__, Вы писали:
E__>Здравствуйте, пыщьх, Вы писали:
E__>>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать. П>>Мой пример: реальная строка — объект со счетчиком ссылок (как в Java). String — просто обертка вокруг указателя, делающая InterlockedIncrement(&pStr->m_RefCount) и InterlockedDecrement(). Полная реализация будет около 10 кб. исходников и приводить ее полностью мне лень. Идея аналогична AddRef()/Release() в COM. За счет инлайновых конструкторов/деструкторов, ваш код скомпилируется в 7 раз по mov [ecx + offset], eax и lock add [ecx + OFFSET], 1 (если Data будет const String &, а не String). Производительность будет намного больше жабьей. Более конкретный пример нужен, или все ясно?
E__>Не, все и так ясно. E__>Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно.
Стандартная строка реализована во времена, когда Java еще даже в проекте не было. А если хочется писать 10кб, юзайте всякие Boost и т.п. Плюс "работает медленнее, чем Java при копировании" не значет "тормознутая строка". Есть ряд других операций, где C++ будет быстрее.
Здравствуйте, пыщьх, Вы писали:
E__>>Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно. П>Стандартная строка реализована во времена, когда Java еще даже в проекте не было.
Я тебе больше скажу: во многих версиях MSVC имплементация строк менялась.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
E__>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.
ТКС>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта.
Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
ТКС>>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта. E__>Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.
И это ещё мы не трогали стандартный аллокатор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Eugeny__, Вы писали:
E__>>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.
ТКС>>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта.
E__>Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.
Значит надо еще какие читы включить, раз строки недостаточно оказалось. Например, можно поменять list<foo> на list<foo*> — ибо копирование класса foo должно было получиться довольно дорогое, а в джава примере никаких копирований нет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.