LINUX.ORG.RU

Адрес и размер объекта без учёта vtable


0

0
Здравствуйте!

Есть такая проблема: я использую некоторую структуру в C+ как сообщение, передаваемое через sysv msg ipc. Сейчас мне приходится избегать использования виртуальных функций в таких объектах, т.к. компилятор добавляет служебное слово в начало объекта (соотв передаётся также содержимое этого слова и размер объекта также увеличивается на размер слова). Подскажите, есть ли корректный способ получать адрес и размер объекта без учёта overhead? Единственное, что мне в голову приходит: вычислять смещение до первого поля объекта ну и дальше грязные трюки с reinterpret_cast..........

★
"Тебя посодют, а ты не воруй" (C) :) Сериализуй данные в массив байтов и передавай куда и как хочешь
phoenix ★★★★
()
Ответ на: комментарий от phoenix
Хе! Пережёвывать данные туда и обратно только для того чтобы передать от одного приложения к другому на одной и той же машине? SysV msg по определению представление данных изменить не могут, зачем сериализация??
ivans ★
() автор топика
Корректного способа нет. То что вам приходит в гловоу - это грязный хак, зависящий от ABI. С другой стороны - а вы уверены, что vtable находится в начале структуры?
Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth
> С другой стороны - а вы уверены, что vtable находится в начале структуры?

действительно, оч хороший вопрос... ;)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от ivans
брр, видимо вам не совсем понятен смысл сериализации, изменять данные ни кто не заставляет
aton ★
()
упалподстул, да вы что батенька творите ?! уж не хотите ли вы использовать потом переданное сообшение как инстанс класса ? если да, то в морг, если нет то объявляйте структуру как мембер класса и ее передавайте.
mumg ★
()
Ответ на: комментарий от mumg
> если нет то объявляйте структуру как мембер класса и ее передавайте.

в структурах тоже иногда бывают vtable:)

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.