2 回答
TA贡献1719条经验 获得超6个赞
原因是 Go 链接到 libpthread,但你的 C 程序没有。如果我添加-lpthread
到 gcc 参数,它也会打印不同的指针。因此,libpthread 定义了它自己的accept
并覆盖了 libc 的(这是有道理的)。
我想出来的方法是,我在两个程序中都插入了一个睡眠,然后翻查/proc/$pid/maps
以查看返回的指针引用的内容。这表明在 Go 的例子中,“当前”指针驻留在 libpthread 中。“真正的”指针总是引用 libc。
TA贡献1852条经验 获得超1个赞
符号不会加载到内存中的固定地址;他们去装载机决定放置它们的任何地方。
这是我在我的机器上多次运行你的 C 程序的输出。
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7f4b5f3127d0 Current: 0x7f4b5f26ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7f45727127d0 Current: 0x7f457266ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7fc3373127d0 Current: 0x7fc33726ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7f0e555127d0 Current: 0x7f0e5546ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7f2fdd9127d0 Current: 0x7f2fdd86ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7fec7db127d0 Current: 0x7fec7da6ee30
govind@Govind-PC:/mnt/c/Temp$ ./dlst
Real: 0x7f07de1127d0 Current: 0x7f07de06ee30
govind@Govind-PC:/mnt/c/Temp$
- 2 回答
- 0 关注
- 174 浏览
添加回答
举报