{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,1]],"date-time":"2025-10-01T15:20:54Z","timestamp":1759332054581,"version":"3.41.0"},"reference-count":42,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2019,10,10]],"date-time":"2019-10-10T00:00:00Z","timestamp":1570665600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2019,10,10]]},"abstract":"<jats:p>Shared memory provides the fastest form of inter-process communication. Sharing polymorphic objects between different address spaces requires solving the issue of sharing pointers. In this paper, we propose a method, named Indexed Virtual Tables (IVT for short), to share polymorphic objects efficiently. On object construction, the virtual table pointers are replaced with indexes, which are used to find the actual virtual table pointers on dynamic dispatch. Only a few addition and load instructions are needed for both operations. Experimental results show that the IVT can outperform prior techniques on both object construction time and dynamic dispatch time. We also apply the proposed IVT technique to several practical scenarios, resulting the improvement of overall performance.<\/jats:p>","DOI":"10.1145\/3360556","type":"journal-article","created":{"date-parts":[[2019,10,11]],"date-time":"2019-10-11T14:53:33Z","timestamp":1570805613000},"page":"1-22","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":4,"title":["IVT: an efficient method for sharing subtype polymorphic objects"],"prefix":"10.1145","volume":"3","author":[{"given":"Yu-Ping","family":"Wang","sequence":"first","affiliation":[{"name":"Tsinghua University, China"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Xu-Qiang","family":"Hu","sequence":"additional","affiliation":[{"name":"Tsinghua University, China"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Zi-Xin","family":"Zou","sequence":"additional","affiliation":[{"name":"Tsinghua University, China"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Wende","family":"Tan","sequence":"additional","affiliation":[{"name":"Tsinghua University, China"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Gang","family":"Tan","sequence":"additional","affiliation":[{"name":"Pennsylvania State University, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2019,10,10]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-47993-7_5"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.OPODIS.2015.20"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2983990.2984019"},{"key":"e_1_2_2_4_1","unstructured":"Boost C++ Libraries. 2018a. Class Template offset_ptr. http:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/boost\/interprocess\/ offset_ptr.html .  Boost C++ Libraries. 2018a. Class Template offset_ptr. http:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/boost\/interprocess\/ offset_ptr.html ."},{"key":"e_1_2_2_5_1","unstructured":"Boost C++ Libraries. 2018b. Managed Memory Segments. http:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/interprocess\/ managed_memory_segments.html .  Boost C++ Libraries. 2018b. Managed Memory Segments. http:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/interprocess\/ managed_memory_segments.html ."},{"key":"e_1_2_2_6_1","unstructured":"Boost C++ Libraries. 2018c. Sharing memory between processes. https:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/ interprocess\/sharedmemorybetweenprocesses.html .  Boost C++ Libraries. 2018c. Sharing memory between processes. https:\/\/www.boost.org\/doc\/libs\/1_67_0\/doc\/html\/ interprocess\/sharedmemorybetweenprocesses.html ."},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.17487\/RFC8259"},{"key":"e_1_2_2_8_1","unstructured":"B. Burshteyn. 2014. Method and System for Accessing C++ Objects in Shared Memory.  B. Burshteyn. 2014. Method and System for Accessing C++ Objects in Shared Memory."},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2660193.2660224"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3132402.3132418"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/168619.168634"},{"volume-title":"Ellis and Bjarne Stroustrup","year":"1990","author":"Margaret","key":"e_1_2_2_12_1"},{"key":"e_1_2_2_13_1","unstructured":"Open Source Robotic Foundation. 2018. ROS Robot operating system. http:\/\/www.ros.org\/ .  Open Source Robotic Foundation. 2018. ROS Robot operating system. http:\/\/www.ros.org\/ ."},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jpdc.2012.09.016"},{"key":"e_1_2_2_15_1","doi-asserted-by":"crossref","unstructured":"W. Gropp E. Lusk A. Skjellum and R. Thakur. 1999. Using MPI: Portable Parallel Programming with the Message-passing Interface. MIT Press. https:\/\/books.google.ae\/books?id=DFT1ngEACAAJ  W. Gropp E. Lusk A. Skjellum and R. Thakur. 1999. Using MPI: Portable Parallel Programming with the Message-passing Interface. MIT Press. https:\/\/books.google.ae\/books?id=DFT1ngEACAAJ","DOI":"10.7551\/mitpress\/7056.001.0001"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133869"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/69622.357182"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/782214"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICPP.2005.48"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/HPCS.2006.50"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1109\/HPDC.2003.1210011"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2004.1281665"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133956.3134066"},{"volume-title":"Clang: A C Language Family Frontend for LLVM","year":"2018","author":"LLVM.","key":"e_1_2_2_24_1"},{"key":"e_1_2_2_25_1","unstructured":"S. Magnenat. 2018. ethzasl_message_transport. https:\/\/github.com\/ethz-asl\/ros-message-transport .  S. Magnenat. 2018. ethzasl_message_transport. https:\/\/github.com\/ethz-asl\/ros-message-transport ."},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/217838.217849"},{"key":"e_1_2_2_27_1","unstructured":"OpenCV team. 2018. OpenCV - Official Site. http:\/\/opencv.org\/ .  OpenCV team. 2018. OpenCV - Official Site. http:\/\/opencv.org\/ ."},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.parco.2017.01.003"},{"key":"e_1_2_2_29_1","unstructured":"Qt Documentation. 2018. QSharedMemory Class. http:\/\/doc.qt.io\/qt-5\/qsharedmemory.html .  Qt Documentation. 2018. QSharedMemory Class. http:\/\/doc.qt.io\/qt-5\/qsharedmemory.html ."},{"volume-title":"ICRA Workshop on Open Source Software.","author":"Quigley M.","key":"e_1_2_2_30_1"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-77610-1_11"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.procs.2017.05.221"},{"key":"e_1_2_2_33_1","unstructured":"ROS Wiki. 2018. Nodelet Robot operating system. http:\/\/wiki.ros.org\/nodelet .  ROS Wiki. 2018. Nodelet Robot operating system. http:\/\/wiki.ros.org\/nodelet ."},{"volume-title":"Proceedings of the International Conference on Parallel and Distributed Processing Techniques and Applications, PDPTA 2000","year":"2000","author":"Sch\u00f6ttner Michael","key":"e_1_2_2_34_1"},{"volume-title":"Advanced Programming in the UNIX Environment","author":"Stevens W. Richard","key":"e_1_2_2_35_1"},{"key":"e_1_2_2_36_1","unstructured":"M. S\u00fastrik. 2018. \u03a6MQ: The Theoretical Foundation. http:\/\/www.250bpm.com\/concepts .  M. S\u00fastrik. 2018. \u03a6MQ: The Theoretical Foundation. http:\/\/www.250bpm.com\/concepts ."},{"volume-title":"Distributed operating systems","author":"Tanenbaum Andrew S.","key":"e_1_2_2_37_1"},{"key":"e_1_2_2_38_1","unstructured":"The Apache XML Project. 2004. Xalan-C++ version 1.10. http:\/\/xml.apache.org\/xalan-c\/ .  The Apache XML Project. 2004. Xalan-C++ version 1.10. http:\/\/xml.apache.org\/xalan-c\/ ."},{"key":"e_1_2_2_39_1","unstructured":"The Object Management Group. 2018a. About the Data Distribution Service Specification Version 1.4. http:\/\/www.omg.org\/ spec\/DDS\/1.4\/ .  The Object Management Group. 2018a. About the Data Distribution Service Specification Version 1.4. http:\/\/www.omg.org\/ spec\/DDS\/1.4\/ ."},{"key":"e_1_2_2_40_1","unstructured":"The Object Management Group. 2018b. Common Object Request Broker Architecture (CORBA\/IIOP) 3.3 edition. http: \/\/www.omg.org\/spec\/CORBA\/3.3\/ .  The Object Management Group. 2018b. Common Object Request Broker Architecture (CORBA\/IIOP) 3.3 edition. http: \/\/www.omg.org\/spec\/CORBA\/3.3\/ ."},{"key":"e_1_2_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/263698.263748"},{"key":"e_1_2_2_42_1","unstructured":"K. Varda. 2018. Protocol buffers: Google\u2019s data interchange format. https:\/\/opensource.googleblog.com\/2008\/07\/protocolbuffers-googles-data.html .  K. Varda. 2018. Protocol buffers: Google\u2019s data interchange format. https:\/\/opensource.googleblog.com\/2008\/07\/protocolbuffers-googles-data.html ."}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360556","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360556","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T23:22:58Z","timestamp":1750202578000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360556"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,10,10]]},"references-count":42,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2019,10,10]]}},"alternative-id":["10.1145\/3360556"],"URL":"https:\/\/doi.org\/10.1145\/3360556","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2019,10,10]]},"assertion":[{"value":"2019-10-10","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}