Is there any update to alignment/padding for structs now that we can write .so files that can be called by C programs? We would have to know it to tell the C compiler what to expect from go side imho.
On Thursday, April 5, 2012 at 9:10:48 PM UTC-7, Kyle Lemons wrote: > > On Thu, Apr 5, 2012 at 7:11 AM, LRN <lrn...@gmail.com <javascript:>> > wrote: > >> Related question: >> If alignment and padding is platform dependent, how do you write and read >> structs to/from a socket? >> > > The solution is to not write platform dependent code. The related topic > of byte ordering and platform independence is covered in this blog post > <http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html>. The gob > package <http://golang.org/pkg/encoding/gob/> (incidentally, if I'm not > mistaken, also written by the author of that blog post), is a performant > binary encoding scheme that will work from and to any platform that > supports go. > > >> For example, in C it is not uncommon to declare a struct, initialize its >> fields with values (converted to big-endian format), then write it into a >> socket in one call. >> The receiver will, again, read the struct from a socket in one call, then >> will do big-endian-to-native format conversion on each field where it is >> applicable - and will get the same struct the sender had. >> This only works when definitions of the struct on both the sender and the >> receiver are aligned in the same way (usually - 1-byte aligned). >> >> I've encountered this problem recently, which is why i'm asking. >> >> Also, MSVC uses a padding algorithm different from the one gcc has, which >> is why there's a -mms-bitfields option in gcc. It forces gcc to use >> MSVC-style padding, which is required if the caller wants to pass certain >> structs to W32 API. >> How will that work in Go? (h-m-m-m...i can probably infer that from W32 >> port of Go by reading its source code...) >> > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.