Есть ли способ установить глобальное выравнивание байтов памяти для всех структур данных в библиотеке JNA (оболочка Java .dll Java)?Как установить глобальное выравнивание байтов памяти для всех структур в библиотеке JNA?
Иногда мне приходится определять правильное выравнивание методом проб и ошибок во время реализации, и в настоящее время я делаю это очень неуклюжим способом - я устанавливаю выравнивание данных (супер (ALIGN_NONE)) в каждой структуре (много структуры в отдельных файлах).
редактировать: Лучший способ решить мою проблему заключается в расширении структуры:
public abstract class StructureAligned extends Structure {
public static final int STRUCTURE_ALIGNMENT = ALIGN_NONE;
protected StructureAligned() {
super(STRUCTURE_ALIGNMENT);
}
protected StructureAligned(Pointer p) {
super(p, STRUCTURE_ALIGNMENT);
}
}
..но это привело к следующему вопросу: Какой (Pointer) Конструктор лучше и почему:
super(p, STRUCTURE_ALIGNMENT);
или
super(STRUCTURE_ALIGNMENT);
read();
или
super(STRUCTURE_ALIGNMENT);
useMemory(p);
read();
?
Все структуры данных в куче 8 байт выровнены. Можете ли вы привести пример того, что вы имеете в виду? –
Я имею в виду n-байтовое выравнивание полей в структурах на основе com.sun.jna.Structure. Этот вопрос связан с http://stackoverflow.com/questions/36747228/c-c-struct-to-java-jna-structure-pointer-to-struct – jakson