@ProCxx

Страница 2276 из 2477
Nikita
13.08.2018
07:29:45
Google
Andrey
13.08.2018
07:32:02
Чем тебе память OS не устраивает?
У вас есть протокол, в котором упакован еще протокол, и вам стоит задача без копирования добраться до внутреннего протокола без копирования, и подменить что-нибудь внутри.

Nik
13.08.2018
07:35:07
COM объект не должен это знать. Он сам под себя память выделяет, и сам же освобождает.
Вот именно этого и не происходит. Там фабрика делает что-то навроде CHttpModule* module = new CMyModule(); *PPModule = module; и привет. Даже если собственно имплементация CMyModule будет правильно освобождать свою память в каком-нибудь Dispose методе, то, где выделен собственно сам module COM понятия не имеет. Это может быть new, это может быть std::allocator, это может быть HeapAlloc, etc.

Andrey
13.08.2018
07:38:36
Ну и главная причина, почему это не нужно -- будет очень медленно.
Разобрать большую вложеность протоколов с копированием в отдельную память каждый протокол для дальнейшего разбора, тоже не быстро получится, я так думаю. А при том что еще нужно что-то поменять и обратно собрать!

Andrey
13.08.2018
07:40:31
С какго тут вообще копирование нужно?
например, уже были написаны парсеры на памяти OS, что бы их не переписывать.

Ilia
13.08.2018
07:41:19
Разобрать большую вложеность протоколов с копированием в отдельную память каждый протокол для дальнейшего разбора, тоже не быстро получится, я так думаю. А при том что еще нужно что-то поменять и обратно собрать!
Ты не думай, ты делай. Есть такое оружие, "бритва Уильяма из Оккама" называется. Вот её вооружись, и никакая виртуальная память тебе будет не нужна.

например, уже были написаны парсеры на памяти OS, что бы их не переписывать.
Чета ты бред какой-то выдаёшь... Ну ладно. Дело твоё, пиши искусственную виртуальную память

например, уже были написаны парсеры на памяти OS, что бы их не переписывать.
Любая память приложения на С++ -- это память OS. Другой нет. Если у тебя есть парсер, то он может работать в ЛЮБОЙ памяти

Google
Friedrich
13.08.2018
07:42:51
например, уже были написаны парсеры на памяти OS, что бы их не переписывать.
Ты хочешь своим парсерам передать кастомный аллокатор.

(но не факт, что он у тебя будет быстрее стандартного)

Ilia
13.08.2018
07:44:40
например, уже были написаны парсеры на памяти OS, что бы их не переписывать.
Ну я конечно могу предположить, что ты говоришь о режиме ядра и пользовательском, но просто не можешь выразить ясно свои мысли... Но там и с библиотеками тогда будет очень сложно... Далеко не все могут

Ilia
13.08.2018
07:49:53
Ну да, так и делают в COM.

Andrey
13.08.2018
07:54:39
Ну я конечно могу предположить, что ты говоришь о режиме ядра и пользовательском, но просто не можешь выразить ясно свои мысли... Но там и с библиотеками тогда будет очень сложно... Далеко не все могут
У вас есть парсеры которые разбирают протоколы на линейной памяти, они проверены, написаны тесты, все по правила, представьте себе, что данные приходят кусками, и эти данные копировать в линейную память запрещено. Удобно было бы воспользоваться локальной виртуальной памятью для превращения их в линейную, и использовать уже написанные парсеры для линейной памяти. Надеюсь я объяснил. Конечно, можно переписать парсеры, и все сделать по другому. И я даже не спорю, что возможно будет работать быстрее.

Spoonson
13.08.2018
07:59:14
так может парсер не только в одну сторону работает, а нужно и вперед и назад

Ilia
13.08.2018
08:02:22
так может парсер не только в одну сторону работает, а нужно и вперед и назад
Ну, двустроронний поток... Ну ладно, да, похоже и на память, но теперь хоть понятно, зачем это.

Я всё равно таких библиотек не знаю...

Andrey
13.08.2018
08:03:31
Ну, двустроронний поток... Ну ладно, да, похоже и на память, но теперь хоть понятно, зачем это.
Ну вот, сносил мне мозг, задал кучу вопросов, а так и не помог :))

Alexander
13.08.2018
08:04:00
Ilia
13.08.2018
08:04:09
Я сразу сказал, что не знаю. Но может другие прочитают, и скажут. Инфы -то ты точно больше выдал

Alexander
13.08.2018
08:04:16
Новая версияя шустрее соображает

Ilia
13.08.2018
08:04:45
Новая версияя шустрее соображает
Да езжай в свою америку лучше! :-)

Alexander
13.08.2018
08:04:57
Да езжай в свою америку лучше! :-)
я туда только на неделю ?

Andrey
13.08.2018
08:07:13
Я написал реализацию виртуальной памяти, могу поделиться.

Andrey
13.08.2018
08:09:17
Но не факт что она оптимальная, искал что-то похожее у других, в надежде что будет быстрее, и красивее написано

Google
Alexander
13.08.2018
08:10:14
без политоты, пожалуйста

Ilia
13.08.2018
09:07:02
А чего ты прибеднялся? Нормально же написал вроде...

Friedrich
13.08.2018
09:09:22
А чего ты прибеднялся? Нормально же написал вроде...
Меня самодельный crc32 там немножко смутил, признаться.

Andrey
13.08.2018
09:19:09
А чего ты прибеднялся? Нормально же написал вроде...
Я подозреваю, что вы просто плохо посмотрели :). Как я уже говорил, что парсеры уже написаны, и они принимают указатель на память ну и размер. Придется менять сигнатуру функций парсера, что собственно не приветствуется, либо порой просто не возможно. У меня не получилась оставить сигнатуру функций парсеров такой, какой они были, при использовании этого класса. Может, у кого-то есть идеи, как сделать, что бы оставить сигнатуру прежней.

Ilia
13.08.2018
09:20:48
Ну пример сигнатуры дай хотя бы. Но вообще да, указатель на этот класс надо передавать вместо указателя на память.

Andrey
13.08.2018
09:26:01
void parse(uint8_t *p, size_t size); - функция приема очередного куска данных. Это как пример.

Ilia
13.08.2018
09:27:44
void parse(uint8_t *p, size_t size); - функция приема очередного куска данных. Это как пример.
Ну, если оставить сигнатуру -- самоцель, можно конечно тут передавать указатель на void через p и потом через reinterpret его кастовать к твоему классу. Но нафига это -- я вот не понимаю. Менять так менять...

Aidar
13.08.2018
09:29:15
Ну напиши кастомный random_access_iterator

Andrey
13.08.2018
09:29:16
Да, кстати, была дурацкая идея, предложить реализовать такой механизм в стандарте, и как-то это поддержать. :)

Aidar
13.08.2018
09:29:30
Действительно дурацкая

Friedrich
13.08.2018
09:30:18
В стандарте есть перегружаемый new.

Aidar
13.08.2018
09:30:42
Да не нужно

Ему нужен просто iterator

Andrey
13.08.2018
09:32:31
Ну напиши кастомный random_access_iterator
спасибо, попробую поковырять в этом направлении.

Ilia
13.08.2018
09:46:20
Да, кстати, была дурацкая идея, предложить реализовать такой механизм в стандарте, и как-то это поддержать. :)
Это не очень много кому нужная фича, У меня более кардинальное предложение, давайте запилим в стандарт проект библиотеки, которая сама бы выдавала нужный функционал, только нужно было бы её сделать #include

Александр
13.08.2018
09:48:12
Привет. Часто вообще используются объединения в коде? Много я потеряю, если пропущу их изучение?

Rastaman
13.08.2018
09:48:50
Onion??

Александр
13.08.2018
09:49:36
Union

Google
Andrey
13.08.2018
09:50:36
Сегодня Union, а завтра захочешь пропустить struct, ну и так далее :)

Александр
13.08.2018
09:51:30
Ok

Александр
13.08.2018
09:55:07
Спасибо

Ilia
13.08.2018
09:55:33
Много
Тебе просто "особенно повезло" в жизни. В смысле -- специфические проекты.

Спасибо
Но про алиасинг (смежная тема) не пропускай изучить!

Andrey
13.08.2018
10:10:17
Это не очень много кому нужная фича, У меня более кардинальное предложение, давайте запилим в стандарт проект библиотеки, которая сама бы выдавала нужный функционал, только нужно было бы её сделать #include
Во многих OS используется механизм виртуальной памяти, при отображении фрагментированной физической памяти в линейную (виртуальную). Почему же нет такого механизма в стандарте. Может, конечно, потому что его достаточно просто реализовать, или он заведомо будет медленнее, чем специальная реализация.

Spoonson
13.08.2018
10:14:52
плюс резать виртуальную память это все же дело ядра, из юзерспейса для себя нарезать очень нетипичная задача и не уверен, что так вообще можно

Если на линукс RTLinux контроллер, то ведь будет...
ну, линукс без вирт памяти вообще не заведется

Alexey
13.08.2018
10:16:02
насколько я слышал, бывает linux на железках без MMU

Andrey
13.08.2018
10:16:06
Именно заведомо будет медленнее. И твой случай ... Ну как бы совсем нетипичный.
Использование сторонних библиотек, на вашей сколь угодно фрагментированной памяти.

Alexey
13.08.2018
10:16:11
но это весьма специфический линух конечно

https://en.wikipedia.org/wiki/%CE%9CClinux

Google
Spoonson
13.08.2018
10:20:01
https://en.wikipedia.org/wiki/%CE%9CClinux
спасибо, не знал что такое есть

Konstantin
13.08.2018
10:22:11
Всем привет! Меня зовут Костя и я программирую на С++.

Если кто-то активно использует #xcode и #cmake, то я добавил фичу "XCODE_STARTUP_PROJECT", по аналогии с вижлой. Чтобы замержить это в мастер требуют написать юнит-тест. Если кто любит парсить вручную файл xcode и писать на cmake регулярные выражения - готов все передать чтобы вместе мы сделали мир немного лучше.

Konstantin
13.08.2018
10:47:45
Игорь привет

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

https://gitlab.kitware.com/cmake/cmake/merge_requests/1399#note_341388

Spoonson
13.08.2018
10:51:25
а почему ты сам не напишешь?

Konstantin
13.08.2018
11:01:02
регулярки на cmake :(((

надо быть специфическим человеком чтобы писать это добровольно

Egor
13.08.2018
11:01:41
они сейчас там более менее стали

Konstantin
13.08.2018
11:01:58
ну и надо добавить что я смотрел полностью аналогичный юнит-тест для VS, и там неплохо так кодяры

Страница 2276 из 2477