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
Activity
gh-112433: Add optional _align_ attribute to ctypes.Structure (GH-113790
serhiy-storchaka commented on Feb 15, 2024
Thank you for your contribution @monkeyman192.
pythongh-112433: Add optional _align_ attribute to ctypes.Structure (p…
gh-112433 add versionadded for `ctypes.Structure._align_` (#125087)
[3.13] pythongh-112433 add versionadded for `ctypes.Structure._align_` (
[3.13] gh-112433 add versionadded for `ctypes.Structure._align_` (GH-…
pythongh-112433 add versionadded for `ctypes.Structure._align_` (pyth…
pythongh-112433: Add optional _align_ attribute to ctypes.Structure (p…