Призывает ли shmget или shmat инициализировать данные? - PullRequest
0 голосов
/ 12 декабря 2018

При использовании разделяемой памяти в c, возможно ли сначала создать данные, а затем присоединить их к разделяемому сегменту (что-то вроде инициализации)?Или я должен сначала создать общий сегмент, а затем прикрепить к нему данные?

Я думаю, что оба способа верны, но я не уверен, что именно происходит во время звонков на shmget и shmat.Делаете ли какие-либо из этих вызовов инициализацию прикрепленных данных?

1 Ответ

0 голосов
/ 12 декабря 2018

возможно ли сначала создать данные, а затем присоединить их к общему сегменту?

Нет.

Или я должен сначала создать общий сегмента потом прикрепить к нему данные?

Да - вы получаете часть памяти, затем записываете / помещаете в нее данные.

shmat () дает вам указатель на разделяемый сегмент.Когда вы присваиваете его существующему указателю в вашей программе, этот указатель указывает на этот фрагмент памяти.

Выполняет ли какой-либо из этих вызовов инициализацию прикрепленных данных?

При создании нового сегмента совместно используемой памяти все байты в нем будут инициализированы нулем.Прикрепляя уже созданный сегмент, вы получаете все, что ранее поместили в этот сегмент.

...