调用shmget或shmat会初始化数据吗?

时间:2018-12-12 14:39:13

标签: c memory shared

在c中使用共享内存时,是否可以先创建数据,然后将其附加到共享段(类似于初始化)?还是我必须先创建共享段,然后将数据附加到该共享段?

我确实认为这两种方法都是正确的,但是我不确定在调用shmgetshmat期间到底发生了什么。这些调用中的任何一个都会初始化附加的数据吗?

1 个答案:

答案 0 :(得分:1)

  

是否可以先创建数据,然后将其附加到共享段?

否。

  

还是我必须先创建共享段,然后将数据附加到该共享段?

是的-获得一块内存,然后在其中写入/放置数据。

shmat()为您提供了指向共享段的指针。当您将其分配给程序中的现有指针时,该指针将指向该内存。

  

这些调用中的任何一个是否初始化附件数据?

创建新的共享内存段时,其中的所有字节都将初始化为零。附加已创建的细分时,您将获得之前放置在该细分中的任何内容。