码迷,mamicode.com
首页 > 编程语言 > 详细

C++: Virtual Table and Shared Memory

时间:2016-07-01 22:45:05      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

See at:补充栏3: C++对象和共享内存 (叙述内容和Link1的内容基本一致)

《C++网络编程 卷1:运用ACE和模式消除复杂性》 《C++ Network Programming Volume 1 Mastering Complexity with ACE and Patterns》 -Douglas C.Schmidt, Stephen D. Huston -叶斌译

 

Link1:

Is it possible to store polymorphic class in shared memory? -> No

http://stackoverflow.com/questions/12969391/is-it-possible-to-store-polymorphic-class-in-shared-memory

引自

http://www.boost.org/doc/libs/1_51_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_region_object_limitations

Virtuality forbidden

The virtual table pointer and the virtual table are in the address space of the process that constructs the object, so if we place a class with a virtual function or virtual base class, the virtual pointer placed in shared memory will be invalid for other processes and they will crash.

This problem is very difficult to solve, since each process needs a different virtual table pointer and the object that contains that pointer is shared across many processes. Even if we map the mapped region in the same address in every process, the virtual table can be in a different address in every process. To enable virtual functions for objects shared between processes, deep compiler changes are needed and virtual functions would suffer a performance hit. That‘s why Boost.Interprocess does not have any plan to support virtual function and virtual inheritance in mapped regions shared between processes.

 

..

C++: Virtual Table and Shared Memory

标签:

原文地址:http://www.cnblogs.com/hellohelloworld/p/5634280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!