我已经编程了很长时间,我看到的程序,当它们内存不足时,会尝试清理并退出,即优雅地失败.我不记得上次我看到一个人真正尝试恢复并继续正常运行.
如此多的处理依赖于能够成功分配内存,特别是在垃圾收集语言中,似乎内存不足错误应归类为不可恢复.(不可恢复的错误包括堆栈溢出等.)
使其成为可恢复错误的令人信服的理由是什么?
language-agnostic memory memory-management exception error-recovery
如果mem是共享内存位置,我是否需要:
XCHG EAX,mem
Run Code Online (Sandbox Code Playgroud)
要么:
LOCK XCHG EAX,mem
Run Code Online (Sandbox Code Playgroud)
原子地进行交换?
谷歌搜索这会产生是和否答案.有没有人知道这个?
我正在为64位x86生成以下指令:
41 F3 0F 10 46 10 movss XMM0,014h[R14]
Run Code Online (Sandbox Code Playgroud)
不幸的是,它在该行上出现故障.gdb将其反汇编为:
0x0000000000402054 <+320>: rex.B
0x0000000000402055 <+321>: movss 0x14(%rsi),%xmm0
Run Code Online (Sandbox Code Playgroud)
请注意,无法识别rex.B覆盖,索引是RSI而不是R14.
指令无效吗?在AMD 64位指令参考中,我找不到任何迹象表明此编码无效.
objdump也无法将其识别为有效指令:
41 rex.B
f3 0f 10 46 10 movss 0x10(%rsi),%xmm0
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?