Bağlam:<bool*> yeniden kayıt dışı belleğe yeniden girme güvenli midir?
shm_open
aracılığıyla iki işlem arasında paylaşılan bir bellek parçam var. ftruncate
ing ve mmap
'dan sonra, tüm parçanın 00000...
bit desenine sahip olduğu garanti edilir. İki süreç boyunca bir boole değeri paylaşmalıyım.
Daha somut bir soru:
makul POSIX sistemlerinde (sav başarısız olmaz ve UB oluşmaz) tamam olması garanti aşağıdaki mı?
void *my_shared_memory_region = calloc(1024, 1);
bool *my_bool = reinterpret_cast<bool*>(my_shared_memory_region);
assert(*my_bool == false);
Ben bool
içinde yaşayabileceği gerçek değerler üzerinde bazı kısıtlamalar vardır inanıyoruz, bu yüzden emin değilim. Bu sorunun this one'dan farklı olduğunu düşünüyorum çünkü reinterpret_cast
, C stili kalıpların yaptığı aynı tür dönüşümleri yapmıyor.
Teknik olarak, yerleştirme-yeni kullanarak yeni bir nesne oluşturmanın dışında malloc'd alanda herhangi bir şey yapmak için C++ 'da tanımlanmamış bir davranıştır. Şahsen bunu standartta bir kusur olarak görüyorum ve kodunuzun çalışmasını beklerim. BTW burada 'static_cast' kullanabilirsiniz. –
@ M.M: Teşekkürler, teşekkürler! –
@ M.M .: Aslında, yeterli boyutta depolama ve doğru hizalama elde edilir edilmez, önemsiz başlatma ile (bu 'bool' içerir) bir nesne vardır. Bu, aynı türden bir değer (katı takma kuralı) kullanarak ona yazana kadar belirsiz bir değer içermesi gerektiğini düşünmeniz gerektiğini söyledi. –