共享内存中的数组长度是多少?

时间:2017-05-25 07:36:22

标签: c arrays pointers memory shared-memory

我有指针和共享内存。

int *data;
shmid = shmget( IPC_PRIVATE, N * sizeof(int), IPC_CREAT | S_IRUSR | S_IWUSR );  
data = (int*)shmat( shmid, 0, 0 );

我将数组写入此共享内存。但是当我尝试计算该数组的长度时,我总是得到8位(或字节,我不知道)。总是当我写入数组时,我得到8位。

请帮助我,对不起我的英语! :)

3 个答案:

答案 0 :(得分:2)

你不能用C计算指针给出的某些数组的使用长度(因为数组会衰减成指针)。您需要在其他地方明确保留该长度(例如,在某些其他变量中,或使用长度为flexible array member的某些struct

当然,您需要将使用的长度(用于计算)和分配的大小(分配时需要)分开。

sizeof operator编译时计算(它是常量,VLA除外)。对于指针,我的Linux / x86-64桌面上总是8个字节(与分配的大小无关,如果有的话)。

答案 1 :(得分:1)

C中的

sizeof()运算符在编译时处解释。在您的程序中, sizeof 运算符返回指针的大小,这取决于您的系统。

答案 2 :(得分:0)

如果你想获得共享内存的大小,那么你可以使用shmctl()

shmtctl(shmid, IPC_STAT, shmid_ds_buf)

存储在与shmid关联的内核数据结构中的每个共享内存段的大小。段的大小由shmid_ds_buf->shm_segsz

指向

参考man shmctl