Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1311002277
Pcrepair
2011-07-18 19:17
2011.11.13
Сокеты. Гарантированное соединение. структура кода


15-1310848190
Юрий
2011-07-17 00:29
2011.11.13
С днем рождения ! 17 июля 2011 воскресенье


1-1272350903
Юрий Зотов
2010-04-27 10:48
2011.11.13
Ошибка создания формы в design-time


15-1310934590
Юрий
2011-07-18 00:29
2011.11.13
С днем рождения ! 18 июля 2011 понедельник


15-1310761791
Юрий
2011-07-16 00:29
2011.11.13
С днем рождения ! 16 июля 2011 суббота