blinue 最近的时间轴更新
blinue

blinue

V2EX 第 347571 号会员,加入于 2018-09-06 12:22:56 +08:00
根据 blinue 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
blinue 最近回复了
dev home 里面可以快捷配置,实测编译 C++ 项目速度明显快了
142 天前
回复了 Betsy 创建的主题 C++ 求教个神奇的 C++ 打印问题
我在 godbolt 里复现这个问题: https://godbolt.org/z/h45896sM5

只会在 O1 优化下出现,是一个悬垂引用导致的巧合。

1. memo.GetReduceGroupId(group_id) 返回的临时的 std::optional<ReducedGroupId> 存储在 [rsp + 16] 到 [rsp + 24]。optional 本身共 9 个字节,前 8 个字节是 ReducedGroupId ,后跟一个 bool 。

2. reduced_group_id 为 .value() 返回的地址,即 rsp + 16 ,注意这是一个栈上的临时空间,reduced_group_id 为悬垂引用。后续用 rbx 存储 reduced_group_id 引用的地址。

3. tmp.push_back(4) 恰好将 4 ( 8 个字节)存储到 [rsp + 16],覆盖了 reduced_group_id 指向的内存。编译器认为这是安全的,因为临时的 std::optional<ReducedGroupId> 已经析构,这导致后续读取 reduced_group_id 的值为 4 。
143 天前
回复了 Betsy 创建的主题 C++ 求教个神奇的 C++ 打印问题
未定义行为就是编译器怎么做都可以,有一篇很好的博客 https://devblogs.microsoft.com/oldnewthing/20140627-00/?p=633
169 天前
回复了 sparks2 创建的主题 Arc 关于 Arc 浏览器 Windows 版的吐槽
在 AppContainer 里运行的应用不走系统代理。性能差和 WinAppSDK 有很大关系,Win11 里用 WinAppSDK 重写的应用性能都下降很多。
183 天前
回复了 tool2dx 创建的主题 编程 C++的 long 是一个很尴尬的存在。
@tool2dx #3 标准只要求 long 至少 32 位,long long 至少 64 位,具体多长是编译器决定的。要保证一致性最好用 int64_t
183 天前
回复了 tool2dx 创建的主题 编程 C++的 long 是一个很尴尬的存在。
需要 64 位用 int64_t 就好,现代 C++ 基本淘汰了 long 和 long long
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2839 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 14:11 · PVG 22:11 · LAX 06:11 · JFK 09:11
Developed with CodeLauncher
♥ Do have faith in what you're doing.