
Nikita
13.08.2018
07:29:45

Ilia
13.08.2018
07:29:50

Google

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

Friedrich
13.08.2018
07:32:32

Ilia
13.08.2018
07:32:38


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

Ilia
13.08.2018
07:35:51

Andrey
13.08.2018
07:38:36

Ilia
13.08.2018
07:39:02

Andrey
13.08.2018
07:40:31

Ilia
13.08.2018
07:41:19

Google

Friedrich
13.08.2018
07:42:51
(но не факт, что он у тебя будет быстрее стандартного)

Ilia
13.08.2018
07:44:40

Nikita
13.08.2018
07:47:21

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

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


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

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
Я написал реализацию виртуальной памяти, могу поделиться.

Ilia
13.08.2018
08:07:43

?
13.08.2018
08:08:59

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

Google

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

Friedrich
13.08.2018
09:00:16
У вас есть парсеры которые разбирают протоколы на линейной памяти, они проверены, написаны тесты, все по правила, представьте себе, что данные приходят кусками, и эти данные копировать в линейную память запрещено. Удобно было бы воспользоваться локальной виртуальной памятью для превращения их в линейную, и использовать уже написанные парсеры для линейной памяти. Надеюсь я объяснил. Конечно, можно переписать парсеры, и все сделать по другому. И я даже не спорю, что возможно будет работать быстрее.
Стековый аллокатор нужен! Аренного типа, например.

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

Friedrich
13.08.2018
09:09:22

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

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

Ilia
13.08.2018
09:46:20

Александр
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:00

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

Крис
13.08.2018
09:51:59

Ilia
13.08.2018
09:54:43

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

Ilia
13.08.2018
09:55:33
Много
Тебе просто "особенно повезло" в жизни.
В смысле -- специфические проекты.
Спасибо
Но про алиасинг (смежная тема) не пропускай изучить!

Andrey
13.08.2018
10:10:17

Ilia
13.08.2018
10:11:00

Anatoly
13.08.2018
10:13:17

Spoonson
13.08.2018
10:13:18

Ilia
13.08.2018
10:14:35

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

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

Konstantin
13.08.2018
10:22:11
Всем привет! Меня зовут Костя и я программирую на С++.
Если кто-то активно использует #xcode и #cmake, то я добавил фичу "XCODE_STARTUP_PROJECT", по аналогии с вижлой. Чтобы замержить это в мастер требуют написать юнит-тест. Если кто любит парсить вручную файл xcode и писать на cmake регулярные выражения - готов все передать чтобы вместе мы сделали мир немного лучше.

Alexander
13.08.2018
10:31:25

Egor
13.08.2018
10:32:02

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, и там неплохо так кодяры