Текущий архив: 2011.11.13;
Скачать: CL | DM;
Вниз
Можно ли проверить указатель на корректность? Найти похожие ветки
← →
Игорь Шевченко © (2010-04-30 15:52) [40]Демо © (30.04.10 13:26) [39]
> http://transl-gunsmoker.blogspot.com/2009/09/blog-post.html
Gunsmoker - это не object pascal language guide.
> > Займись на досуге увеличением на единицу переменной типа
>
> > Pointer
>
>
> А в чём проблема?
> К указателям применима адресная арифметика
У тебя тип Pointer поддерживает арифметику ?
или это тоже не указатель ?
← →
Демо © (2010-04-30 16:20) [41]
> Игорь Шевченко © (30.04.10 15:52) [40]
> Демо © (30.04.10 13:26) [39]
> Gunsmoker - это не object pascal language guide.
Ну я и не говорил, что по нему нужно Delphi изучать.
По поводу остального позже напишу...
← →
SPeller © (2010-05-04 02:02) [42]Почему мне это нужно. Указатель передаю через параметр оконного сообщения (внутри процесса, ессно) в сообщении WM_USER + N, который указывает на структуру с данными (маршалинг). Программа моя в виде длл может загружаться в произвольное приложение. Окно создается моей дллкой в основном гуишном потоке. Так вот, нет абсолютно никакой гарантии, что чужое приложение не пошлет окну сообщение с таким же номером, и что оно передаст в wParam тоже неизвестно. Ситуэйшин редкий, согласен, но зачем испытывать судьбу. И вот тут, чтобы не было ненужных ошибок в будущем, я и хотел вставить проверочку на то, что указатель - это указатель на память и оттуда можно хотябы читать. Поскольку структуры, которые я передаю, используются для маршалинга ком вызовов, то тут алгоритмы, снижающие быстродействие, применять нежелательно.
Наверное, нужно заводить какой-то быстрый список указателей на выделенные блоки, по которому и бегать при проверке.
← →
Германн © (2010-05-04 02:10) [43]
> Так вот, нет абсолютно никакой гарантии, что чужое приложение
> не пошлет окну сообщение с таким же номером
Хм. Ты уверен?
← →
SPeller © (2010-05-04 06:36) [44]Кто запрещает приложению слать сообщения WM_USER?
← →
Leonid Troyanovsky © (2010-05-04 07:31) [45]
> SPeller © (04.05.10 02:02) [42]
> Почему мне это нужно. Указатель передаю через параметр оконного
> сообщения (внутри процесса, ессно) в сообщении WM_USER +
RegisterWindowMessage?
> Наверное, нужно заводить какой-то быстрый список указателей
IMHO, выделить массив блоков потребного размера,
и использовать TBits для индексов свободных блоков.
--
Regards, LVT.
← →
Игорь Шевченко © (2010-05-04 12:30) [46]SPeller © (04.05.10 02:02) [42]
А зачем гланды вырезать через непредназначенное для этого отверстие ?
← →
SPeller © (2010-05-05 02:46) [47]
> Leonid Troyanovsky © (04.05.10 07:31) [45]
> RegisterWindowMessage?
Мсдн не рекомендует:
Only use RegisterWindowMessage when more than one application must process the same message. For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF
> IMHO, выделить массив блоков потребного размера,
> и использовать TBits для индексов свободных блоков.
Спасибо, подумаю над этим.
Off:
> Игорь Шевченко © (04.05.10 12:30) [46]
> А зачем гланды вырезать через непредназначенное для этого
> отверстие ?
Игорь, у меня иммунитет к вашему снобизму. Есть что сказать по делу - говорите, нет - молчите. "Умные" советы вобщем и ни о чем одновременно мне не нужны.
← →
Leonid Troyanovsky © (2010-05-05 08:12) [48]
> SPeller © (05.05.10 02:46) [47]
> must process the same message. For sending private messages
> within a window class, an application can use any integer
Дык, оно ж не приватное, бо приложение - чужое, и только
его создателю известно как оно на него среагирует.
Для гарантии нужно гарантированно уникальное (на уровне
сессии) сообщение, т.е., RWM.
> Off:
Во-ще-то, в COM есть еще всякие IMalloc.
--
Regards, LVT.
← →
С любовью, твой дядя Исаак (2010-05-05 08:33) [49]Удалено модератором
← →
Чилли-Всучилли (2010-05-05 08:45) [50]Указатель передаю через параметр оконного сообщения...Так вот, нет абсолютно никакой гарантии, что чужое приложение не пошлет окну сообщение с таким же номером, и что оно передаст в wParam тоже неизвестно. Ситуэйшин редкий, согласен, но зачем испытывать судьбу.
GlobalAlloc() / GlobalLock() / GlobalUnlock() / GlobalFree()
LocalAlloc() / LocalLock() / LocalUnlock() / LocalFree()
ОС сама будет следить за корректностью хендлов. При попытке залочить некорректный хендл памяти - вернет nil. Вот и вся проверка.
← →
SPeller © (2010-05-05 08:56) [51]
> в COM есть еще всякие IMalloc
У меня свой ком :) IMalloc... тоже вариант. Кто будет лучше - IMalloc или своё на TBits? Или без разницы, только IMalloc уже готовый?
С RWM я подумаю. Сейчас использую диапазон сообщений, который отфильтровываю из очереди. RWM не гарантирует что возвращенные номера сообщений будут подряд. Поэтому, скорее всего, придется в одно сообщение всё засунуть. Наверное так и сделаю.
← →
SPeller © (2010-05-05 09:00) [52]
> Чилли-Всучилли (05.05.10 08:45) [50]
> GlobalAlloc() / GlobalLock() / GlobalUnlock() / GlobalFree()
> LocalAlloc() / LocalLock() / LocalUnlock() / LocalFree()
>
> ОС сама будет следить за корректностью хендлов. При попытке
> залочить некорректный хендл памяти - вернет nil. Вот и вся
> проверка.
Что-то msdn сходу пугает: The global functions are slower than other memory management functions. А мне замедлять не нуно :) Наоборот быстродействие здесь критично.
← →
Leonid Troyanovsky © (2010-05-05 09:08) [53]
> SPeller © (05.05.10 08:56) [51]
> - IMalloc или своё на TBits?
Если размер блока будет удачный, то заранее распределенный массив
будет, IMHO, быстрее, бо не нужны многочисленные alloc-free.
Ну, это все при условии, что можно разово распределить
подходящий по размеру фрагмент.
--
Regards, LVT.
← →
Чилли-Всучилли (2010-05-05 09:14) [54]are slower than other memory management function
Чем другие функции управления памятью. Некоторое замедление связано с тем, что работа ведется через хендлы ОС, а не через указатели, то есть, ОС должна заносить хендлы во внутренние списки и, при необходимости (xxxLock, xxxFree), проверять наличие хендлов в списках, переводить их в вид простых указателей, при необходимости отображая в нужные участки памяти процессов в случае GlobalXxx, а в случае LocalXxx и этого делать не надо. То есть, на деле, задержки хоть и есть, но весьма небольшие. Тем более, что все это уже даным-давно максимально оптимизировано разработчиками ОС.
То есть, на самом деле это и есть "какой-то быстрый список указателей на выделенные блоки, по которому и бегать при проверке" (С) [42], только реализованный на уровне ОС.
← →
Leonid Troyanovsky © (2010-05-05 09:48) [55]
> Чилли-Всучилли (05.05.10 09:14) [54]
> при необходимости отображая в нужные участки памяти процессов
> в случае GlobalXxx,
Оно ничего не отображает, Global - это дань 16 битному прошлому.
--
Regards, LVT.
← →
Игорь Шевченко © (2010-05-05 10:45) [56]SPeller © (05.05.10 02:46) [47]
> Есть что сказать по делу - говорите, нет - молчите
Не могу молчать, у меня вызывают живой и неподдельный интерес потомки Ивана Кулибина, изобретающие очередной пятиколесный велосипед. Хочешь, чтобы молчал - не пиши.
← →
brother © (2010-05-05 12:37) [57]> Не могу молчать,
ну, свобода слова)
← →
SPeller © (2010-05-05 14:42) [58]
> Leonid Troyanovsky © (05.05.10 09:08) [53]
> Если размер блока будет удачный, то заранее распределенный
> массив
> будет, IMHO, быстрее, бо не нужны многочисленные alloc-free.
> Ну, это все при условии, что можно разово распределить
> подходящий по размеру фрагмент.
Скорее всего не выйдет. Всегда будет вероятность превышения размера. Заранее неизвестно сколько объектов будет работать и сколько вызовов будет одновременно производиться.
off:
> Игорь Шевченко © (05.05.10 10:45) [56]
> Не могу молчать, у меня вызывают живой и неподдельный интерес
> потомки Ивана Кулибина, изобретающие очередной пятиколесный
> велосипед. Хочешь, чтобы молчал - не пиши.
Потомок настрадамуса?? )))
Вот ты же не спросил что для чего, отчего и почему, а уже ярлыков навешал. Это типа так правильно, так подобает Мастерам? По-моему, это обыкновенный старческий снобизм, типа я очень умный, а вы идиоты, и это не я должен думать почему не считать вас идиотами, а вы должны меня убеждать что вы не идиоты.
Проще будь.
Страницы: 1 2 вся ветка
Текущий архив: 2011.11.13;
Скачать: CL | DM;
Память: 0.59 MB
Время: 0.01 c