2014-09-18 7 views
-3

Я использую ММАП и у меня есть такой код:Могу ли я просто сохранить результат mmap в целое число?

void* mappedRegion; 

mappedRegion = mmap(0, 8192, PROT_READ| PROT_WRITE, MAP_SHARED, fd, 0); 

В C++ является недействительным указатель правильный способ сделать это? Зачем нам нужен указатель на пустоту? не mmap просто возвращает адрес нового отображения? Будет ли int32_t обрабатывать это?

+1

'mmap' возвращает' void * ', так что вам здесь нужно, независимо от языка, который вы используете. И, конечно, 'void *' может быть 64 бита, поэтому использование более короткого целочисленного типа было бы очень плохой идеей. –

+0

Вы не можете предположить, что возвращенный адрес имеет фиксированную битовость, если вы хотите, чтобы переносимый код –

+0

'mmap' не является элементом C++ 11. –

ответ

3

Да, это правильный способ, и нам нужен void*, потому что это то, что возвращает mmap.

Да, это возвращаемое значение является «просто» указателем, но нет гарантии, что int32_t сможет удержать его после переинтерпретации.

BTW: Вам нужно будет нанести его надлежащему типу для хранения ваших объектов позже, так как арифметика указателей невозможна для неполных типов.

+0

ОК, спасибо, мне было интересно, нужно ли как-то использовать C++ 11 auto. – user1876942

+0

Я действительно не хотел бы в этом случае, хотя это не больно. – Deduplicator

1

не mmap просто возвращает адрес нового картографирования?

Да.

Адреса являются указателями, а не целыми числами.

Смежные вопросы