共享内存内指针使用问题,求关注!!!谢谢~~
各位同学,请教个问题:
我现在预想实现一个有动态增加机制的共享内存,一来可以应予系统吞吐量(量大的时候增加记录节点,量小的时候释放记录节点),二者则可以合理控制内存的使用上限。
预计的实现流程是:
1、创建共享内存,定义节点结构,结构如下:
struct namedShareM {
sem_t mutex, nempty, nstored;//多进程同步访问信号量
struct stringNode * headNode;//头结点
struct stringNode * currNode;//当前处理节点
};
//节点结构
struct stringNode {
char charStr[ 100 ];
struct stringNode * next;
};
2、初始化共享内存,封装put方法,负责将值放入共享内存,此方法由A进程调用,方法中会malloc一块节点,用初始化好的共享内存两个指示指针指向这块空间。
3、封装get方法,负责从共享内存中取A进程放入的值,此方法由B进程调用,方法中会用共享内存头结点指针取得处理节点,问题就出现在这里,下面上截图:
A进程put地址:
(gdb) print reqSharePtr->headNode
$1 = (stringNode *) 0x6050d0
(gdb) print &reqSharePtr->headNode->charStr[0]
$3 = 0x6050d0 "hello"
(gdb) x/16xw 0x6050d0
0x6050d0: 0x6c6c6568 0x0000006f
但是B进程的地址空间:
(gdb) print reqSharePtr->headNode
$1 = (stringNode *) 0x6050d0
(gdb) print &reqSharePtr->headNode->charStr[0]
$2 = 0x6050d0 "@!u\367\377\177"
(gdb) x/16xw 0x6050d0
0x6050d0 <_GLOBAL_OFFSET_TABLE_+232>: 0xf7752140 0x00007fff
从运行的结果可以看出
1、共享内存确实保存了malloc后的地址值;
2、是否可以证明B进程的地址空间不同于A进程的地址空间,因为同一个地址值确实不一样的数据?
那该怎样实现动态共享内存呢?
谢谢大家的帮忙,感激!!!