我有指针和共享内存。
int *data;
shmid = shmget( IPC_PRIVATE, N * sizeof(int), IPC_CREAT | S_IRUSR | S_IWUSR );
data = (int*)shmat( shmid, 0, 0 );
我将数组写入此共享内存。但是当我尝试计算该数组的长度时,我总是得到8位(或字节,我不知道)。总是当我写入数组时,我得到8位。
请帮助我,对不起我的英语! :)
答案 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