libloader与插件端的内存手动对齐
Antares0982 opened this issue · comments
Antares commented
功能描述
在插件和libloader对接时,加一个检查两边sizeof(void*)是否相等
原因
之前用标准库数据结构进行数据交互,导致各种未定义行为。例如,msvc编译器下,std::string在debug x64环境的大小是40,在release x64下是32(导致的问题例如: #119,release和debug版本的libloader与插件不能混用)。于是,在出现数据交换的地方我们将需要全部使用整型,如指针类型、int、long等。
为了保证加载时不再产生这类问题,我们至少需要保证两边的指针长度相同(也可能按情况增加int、long等长度检查),如都是4位或者都是8位,如果不相同libloader将输出日志以让用户了解到底发生了什么问题。目前考虑仅支持在64位编译,之后可能会添加32位的支持。
组件选择
loader
Antares commented
我想了想,还是这样子吧,检测libloader和插件是不是同为64位或者同为32位(32位可能会和jvm那边有些对接问题,麻烦 @Nambers 测试一下这个,用32位jvm),如果不是的话报一条log然后拒绝加载。如果是同位数的话就直接假设长度是当前位对应长度来读数据。
Eritque arcus commented
32位支持打咩 🫤
Antares commented
32位支持打咩 🫤
有人有64位洁癖,但我不说是谁😆
Antares commented
额外要求sizeof(char)==1,一般来说都会满足