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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.