Op donderdag 04 augustus 2005 20:37, schreef Luis Oliveira:
On 4/ago/2005, at 13:33, Wilco Greven wrote:
I'm using cffi for trying to revive the Qt bindings. Doing so I found out that for the calculation of the size of struct types, the alignment of the struct itself is not taking into account. For the following struct for example
What should the alignment of a struct type be? I think it depends on the ABI and I think right now they are being aligned as if they were void* pointers, that doesn't sound right.
(defcstruct smoke-class (class-name string) (parents index) (class-fn :pointer) (enum-fn :pointer) (flags :unsigned-short))
Is index a struct type? If not, what is the relevance of struct alignment here?
The example I gave was rather bad. Let me give a better one.
typedef struct { int a; short b; } TestStruct;
(defcstruct test-struct (a :int) (e :short))
The problem arose when I wanted to access elements in an array of structs. Say I have an array "TestStruct *tests". I expected to be able to access the individual elements of this array by
(inc-ptr tests (* (foreign-struct-size 'test-struct) array-index)
The problem is that (foreign-type-size 'test-struct) returns a size of 6, while sizeof(TestStruct) returns 8. Therefore the code above doesn't work correctly.
My guess was that this had something to do with alignment of the struct, but I have to admit that my knowledge about memory alignment is pretty much nil. zero.