链接列表在共享内存,linux内核中

时间:2012-02-24 23:59:10

标签: linux shared-memory

这是一个面试问题,我仍然对此感到困惑。

实施2个API - 1.访问共享内存中存在的链表的头部

2.访问头部后的元素

问题中的内核是Linux。

我在一个论坛上读到,不使用指针,应该使用偏移量(如果不使用指针,它仍然是一个链表)

我真的不明白这一部分。考虑到虚拟内存的存在,还会对将要发生的地址转换感到好奇。

对于这个问题含糊不清的道歉,但这是我能想到的。

感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:6)

您无法使用指针,因为无法确保共享内存映射到两个进程中的同一地址。一个进程不知道如何处理指向另一个进程的虚拟地址空间的指针。

因此,您将偏移量存储到共享内存块中。两个进程都确切地知道共享内存块的第712个字节是什么。要访问这样的偏移量,可以将偏移量添加到共享内存块在此特定进程中映射的基址,并创建可在该特定进程中使用的指针。