Yes, so what you are describing to me needs to be told to the C compiler
users in a formal way so that they make sure their alignment is the same as
Go. Thanks.

On Mon, Sep 19, 2016 at 2:27 PM, Ian Lance Taylor <i...@golang.org> wrote:

> On Mon, Sep 19, 2016 at 2:08 PM, Ali Demir <dem...@gmail.com> wrote:
> > Packing option is explicitly specified for VC++:
> >
> > https://msdn.microsoft.com/en-us/library/xh3e3fd0.aspx
> >
> > The user needs to make sure whatever they pick (or default) in their
> project
> > matches what Go compiler used. So it may help to specify what go
> compiler is
> > using.
>
> There is no answer to that question.  The Go compiler is not running
> the C compiler.
>
> In general the Go compiler expects fields to be aligned to their size.
> That is, a four byte field is aligned to a four byte boundary, and an
> eight byte field is aligned to an eight byte boundary.  As I said
> earlier, the compiler emits padding fields so that everything will
> work if the C compiler uses a smaller alignment.  However, things will
> fail if the C compiler uses a larger alignment.  I'm not aware of any
> such C compiler, but I guess it wouldn't shock me.
>
> Ian
>
> > On Mon, Sep 19, 2016 at 10:00 AM, Ian Lance Taylor <i...@golang.org>
> wrote:
> >>
> >> On Mon, Sep 19, 2016 at 8:50 AM, Ali Demir <dem...@gmail.com> wrote:
> >> > Header file won't have padding / alignment info. That would be a
> >> > compiler
> >> > setting on the C side that is using the header. So the programmer
> needs
> >> > to
> >> > setup C compiler in a way that is compatible with the go compiler. How
> >> > would
> >> > he know how to set it up? Do we just assume defaults are the same
> >> > between Go
> >> > and C?
> >>
> >> The cgo tool will generate padding fields as needed to ensure that the
> >> fields are aligned as expected.
> >>
> >> It's true that the cgo tool does assume that it knows the alignment
> >> requirements of the basic types.  These requirements are not normally
> >> changed by compiler options.  The alignment requirements of unusual
> >> types, such as processor-specific vector types, are not relevant,
> >> since Go can't represent them and they will therefore never appear in
> >> the Go/C interface.
> >>
> >> Do you have a specific concern, or is this purely abstract?
> >>
> >> Ian
> >
> >
>

-- 
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.

Reply via email to