как определить ftok столкновение разделяемой памяти - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь отладить проблему с устаревшим кодом.Пытаясь понять, на что я смотрю, я обнаружил, что он создает два уникальных пространства общей памяти, используя ftok.Я посмотрел в Интернете, чтобы увидеть, что он делает, и я наткнулся на эту ссылку.Я посмотрел глубже и обнаружил, что ftok не гарантирует уникальные ключи, и есть небольшая вероятность, что пробелы могут столкнуться.Я застрял, пытаясь определить, так ли это для меня или нет.Как определить, действительно ли это проблема столкновения пространства совместно используемой памяти?Это может быть ужасная утечка памяти в старых исполняемых файлах ...

1 Ответ

0 голосов
/ 21 ноября 2011

Как определить, действительно ли это проблема коллизии в общей памяти?

Easy: вызовите ftok() с теми же параметрами, что и ваш реальный код, и сравните два ints, которые возвращаются на равенство.

То есть, если возвращаемый ключ уникален, сгенерированное пространство разделяемой памяти также не подвержено конфликтам?

Пока ключи различны, два сегмента памяти полностью независимы.

Приложение может поместить любые значения в два сегмента, которые оно желает. Если приложение хочет поместить значения, например, в сегмент1, указывающий на значения в сегменте2, приложение должно сохранять все ссылки прямыми.

...