You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When creating a ctypes.Structure to map data from c/c++ to python, I have been coming up against issues where I have a structure which has an alignment due to a #pragma align.
Currently there is no way to define a ctypes.Structure which can map to an object like this.
I propose we add an _align_ attribute to the ctypes.Structure class which will instruct the code how to align the structure itself in memory.
In the way that the _pack_ attribute indicates the maximum alignment of the fields in the struct, this would indicate the minimum alignment of the struct itself.
An example of such a struct and it's use is as follows:
Without the _align_ attribute the value of m.string.string would just be an empty bytes object since it would be reading from 8 bytes into the bytearray.
I have already made a (preliminary) implementation of this here.
Because the attribute is optional, I believe there are no potential backward compatibility issues as the default alignment will simply be what it was before (ie. 1).
Has this already been discussed elsewhere?
I have already discussed this feature proposal on Discourse
Feature or enhancement
Proposal:
When creating a
ctypes.Structure
to map data from c/c++ to python, I have been coming up against issues where I have a structure which has an alignment due to a#pragma align
.Currently there is no way to define a
ctypes.Structure
which can map to an object like this.I propose we add an
_align_
attribute to thectypes.Structure
class which will instruct the code how to align the structure itself in memory.In the way that the
_pack_
attribute indicates the maximum alignment of the fields in the struct, this would indicate the minimum alignment of the struct itself.An example of such a struct and it's use is as follows:
Without the
_align_
attribute the value ofm.string.string
would just be an emptybytes
object since it would be reading from 8 bytes into thebytearray
.I have already made a (preliminary) implementation of this here.
Because the attribute is optional, I believe there are no potential backward compatibility issues as the default alignment will simply be what it was before (ie. 1).
Has this already been discussed elsewhere?
I have already discussed this feature proposal on Discourse
Links to previous discussion of this feature:
https://discuss.python.org/t/add-ability-to-force-alignment-of-ctypes-structure/39109
Linked PRs
The text was updated successfully, but these errors were encountered: