指针句柄限制修复

指针句柄限制修复

将指针句柄限制从200万扩展到400万

[color=#d4d4d8]《Starfield》为已加载的引用(例如物体、角色和飞船部件)使用一个包含 2,097,152 个指针句柄的固定池。大量使用模组的游戏可能会耗尽此池,导致崩溃或内容[url=https://www.reddit.com/r/starfieldmods/comments/1sl7t0g/its_time_to_talk_about_the_pointer_handle_limit/]无法正确加载[/url]。

Pointer Handle Limit Fix 通过在启动早期替换原始句柄池,将可用上限从 2,097,151 翻倍至 4,194,303 个句柄。

此更改完全在运行时进行,并在模组激活时自动应用。

请注意:Starfield Engine Fixes 在其指针句柄日志记录中仍会报告原版上限,这似乎是硬编码的。你可以在 Documents\My Games\Starfield\SFSE\Logs 中的 StarfieldHandleCapRaise.log 里查看你真实的指针句柄使用情况
 
此模组与版本 1.16.236 和 1.16.244 兼容

## [b]配置[/b]

随附的 INI 包含两个诊断选项,如果你想查看游戏在原版上限之上加载了哪些文件,可以启用它们:

[General]
EnableLogging = 1
SampleSize = 16

EnableLogging 启用定期的句柄使用情况报告。当使用量超过原始上限后,日志会标识来源插件,并提供超过原版上限的引用的详细引用和基础表单样本。

SampleSize 控制报告多少个详细引用,接受 0 到 64 的值。

## [b]测试和实地报告[/b]

在开发过程中,已验证该插件能够识别未改动的原版句柄管理器,在启动早期替换该池,并在继续之前回读每个已更改的管理器字段。这将可用容量从 2,097,151 提升至 4,194,303 个句柄,同时保留 1,024 代。

超限诊断功能曾针对一个合成的 Starfield 句柄池进行了压力测试,该池包含 350 万个有效、不一致以及故意不可读的条目。诊断功能正确计数并分类了这些条目,安全捕获了无效指针读取,并检查了每个可读引用的缓存句柄是否能解码回发现该引用的同一物理池槽位。在实际游戏过程中,该插件还会跟踪单个槽位的重复分配,验证其代值是否按预期递增,并在代值发生回绕时发出警告。

另外三名测试人员各自独立地在超过原版指针句柄限制的情况下游玩了约三到四天。三人都报告在测试期间游戏运行正常,没有出现可归因于提高上限的问题。[/color]


[left][url=https://ko-fi.com/asciimods][img width=40,height=40]https://storage.ko-fi.com/cdn/cup-border.png[/img][/url][/left]
[url=https://discord.gg/Wz393uJ8Qh][img]https://img.icons8.com/color/48/discord-logo.png[/img][/url]
[url=https://github.com/1001Bits/Pointer-Handle-Limit-Fix/tree/main]源代码[/url]