0

OSxでCを使用し、shmget()を使用して2つの異なるプログラム間で使用されるメモリを取得しています構造やヘルプに使用されるポインタを使用していただければ幸いです

4

2 に答える 2

1

いいえ、構造体で sizeof を使用する必要があります。実装が構造体内の値をどのようにパディングするかは保証できないため、それらのサイズを想定していません。また、後でメンバーを構造体に追加したためにサイズが変更された場合でも、メモリ割り当ては正しく機能します。

次に、sizeof の値を使用して、共有メモリ領域で使用する予定の構造体のインスタンス数を掛けます。

于 2013-03-20T12:41:25.147 に答える
0

次のような構造体があるとします。

typedef struct {
    int aCount;
    int bCount;
    int cCount;
} data_t;

以下の関数は、指定されたサイズの共有メモリを作成します。

int shared_memory_create(size_t memory_size)
{
    int shm_key = shmget(IPC_PRIVATE, memory_size, IPC_CREAT | IPC_EXCL | 0666);
    if(shm_key < 0) {
        perror("Failed to Create Shared Memory Key");
        exit(0);
    }

    return shm_key;
}

27 個の要素に対応する共有メモリを作成する場合は、次のように関数shared_memory_createを呼び出します。

shm_key = shared_memory_create(27*sizeof(data_t));
于 2018-04-30T10:24:40.680 に答える