Лучший и безопасный способ передачи данных по каналу на другой платформе - PullRequest
6 голосов
/ 07 сентября 2011

В настоящее время я сталкиваюсь с проблемой, когда я передаю буферный объект по каналу из арки x64 в арку x86. Объект также содержит некоторые значения указателя, которые составляют 8 байтов в x64, и тот же размер указателя в x86 составляет 4 байта. Теперь, когда я передаю объект по каналу, его размер немного больше, чем ожидала платформа x86 для того же объекта (потому что размер указателя здесь меньше). Что я мог понять из аналогичного поста на этом форуме, что мне может понадобиться использовать сериализацию, но я не знаю как, поскольку я никогда раньше не использовал сериализацию. Сериализация решит эту проблему? Я использую C ++ с компилятором GCC. Я хочу, чтобы продукт работал на всех арках (ia64, x64 или x86).

Ответы [ 3 ]

4 голосов
/ 07 сентября 2011

Указатель - это адрес ячейки памяти в вашей локальной работающей программе *. Бесполезно отправлять его в другую программу, более бесполезно для программы, работающей на другом компьютере, и еще более бесполезно, если архитектура другого компьютера отличается.

Использование сериализации в вашем контексте означает отправку содержимого того, на что указывает указатель, вместо отправки самого бессмысленного самого указателя.

Чтобы обеспечить кросс-архитектурную отправку данных, проще использовать текст для передачи данных. В большинстве, если не во всех широко используемых межплатформенных протоколах, используется текст: HTTP, IMAP, IRC ...

*: я использую program вместо process.

2 голосов
/ 07 сентября 2011

повышение сериализации специально разработано для:

Здесь мы используем термин «сериализация» для обозначения обратимой деконструкции произвольного набора структур данных C ++ в последовательностьбайтов.Такая система может использоваться для восстановления эквивалентной структуры в другом программном контексте.В зависимости от контекста, это может быть связано с сохранением объекта, удаленной передачей параметров или другим средством.В этой системе мы используем термин «архив» для обозначения конкретного рендеринга этого потока байтов.Это может быть файл двоичных данных, текстовых данных, XML или какой-либо другой файл, созданный пользователем этой библиотеки.

Кстати, используйте структуры POD и убедитесь, что вы используете типы данных.определенного типа.Для этого используйте предопределенные типы (например, посмотрите здесь )

1 голос
/ 07 сентября 2011

http://code.google.com/apis/protocolbuffers/

Буферы протокола - это независимый от языка, независимый от платформы, расширяемый механизм Google для сериализации структурированных данных - представьте XML, но меньше, быстрее и проще.Вы определяете, как вы хотите, чтобы ваши данные были структурированы один раз, затем вы можете использовать специальный сгенерированный исходный код, чтобы легко записывать и считывать ваши структурированные данные в различные потоки данных и из них, используя различные языки - Java, C ++ или Python.

Работал у меня на x86 / 64, arm

...