Стандартная последовательность работы с shm
- shm_open
- ftruncate
- mmap
Несколько вопросов:
1. Почему я могу работать с данными за пределами замапленного размера и ничего не падает? По идее SIGBUS должен был случиться. Valgrind тоже ничего подозрительного в этом не заметил. Предполагаю, что shm_open создает объект размером со страницу, например. И поэтому все «хорошо», пока я за этот размер не вылезу.
2. Что реально делает ftruncate? Изменяет размер shm объекта, или только размер файла в /dev/shm? Я провел несколько экспериментов - судя по всему, второе.
3. Если описаное в пункте 1 не нормально, т.е. SIGBUS может выстрелить в самый неожиданный момент, то можно ли как-то перемапить с другим размером? Я вижу два варианта: замапить на тот же адресс, но с большим размером(MAP_FIXED вроде как заставляет использовать переданный адресс) ИЛИ выделять безумно большой размер, например, с оперативу, и надеятся что больше не понадобится, а если и понадобится, то нужно добавить оперативки, ибо все равно работать не будет.