• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-08-15 10:37 Aet 隐藏边栏 |   抢沙发  5 
文章评分 2 次,平均分 5.0

消息循环

概述

  1. ATL消息循环

h

cpp

其他:Visual studio 相关

符合模式permissive

  1. 概述
    1. /permissive-Visual Studio(从 VS 2017 版本开始引入)中的一个重要编译器选项,旨在让编译器遵循最新的 C++ 语言标准(C++11C++14C++17C++20 及更高)更严格,并禁用许多历史悠久的 Microsoft 特有的语言扩展
    2. 目标是提高代码的可移植性和符合标准
  2. 作用
    1. /permissive-模式下,编译器对代码的标准符合性要求显著提高
    2. 它会拒绝编译许多依赖于非标准、Microsoft 传统行为的代码,这些行为在默认的 /permissiveVS 2019 Update 3 (16.3) 起,默认为 /permissive-)或更早版本的 MSVC 编译器宽松模式下会被接受

其他

强制内存访问+编译指令 防优化

  1. 概述
    1. 看一段dump收集相关的实现,发现了这个手法

  1. 代码

  1. 问题
    1. 发现很多重要信息之后都调用了这个debug::Ref

  1. 解析
    1. #pragma optimize("", off)
      强制编译器不对该函数进行优化(如删除“无副作用”代码),确保汇编指令被保留
    2. __declspec(noinline)
      阻止编译器将函数内联展开,避免其逻辑被合并到调用处后被优化掉
    3. 内联汇编(32位环境)
      mov eax, ref:将指针 ref(指向 last_error)的地址加载到寄存器 eax
      mov eax, [eax]:解引用操作,读取 eax指向的内存值(即 last_error的实际内容)
      此操作通过显式内存访问“欺骗”编译器,使其认为 last_error被使用,从而保留该变量
  2. 总结
    1. 通过 debug::Ref的“虚假”内存访问,迫使编译器保留 last_error及其值

一种Windows的延迟删除机制

  1. 通过 CreateFileW的特定参数组合实现了一种延迟删除机制:
    1. 文件不会立即被删除,而是在所有句柄关闭后由系统自动删除
  2. 关键在于 FILE_FLAG_DELETE_ON_CLOSE标志,其作用如下:
    1. 当该句柄(或文件的其他所有句柄)被关闭时,系统自动删除文件
    2. 删除操作由文件系统驱动(如NTFSFAT32)在关闭时执行,而非应用程序主动调用 DeleteFile
    3. 调用者需具备文件的删除权限(DELETE)或父目录的子项删除权限(DELETE_CHILD
  3. 实现
    1. DELETE:请求删除访问权限,允许后续通过句柄标记文件为“待删除”
    2. FILE_SHARE_DELETE:允许其他进程以 DELETE权限打开同一文件(例如重命名操作)
    3. OPEN_EXISTING:仅打开已存在的文件。若文件不存在,返回 INVALID_HANDLE_VALUE(错误码 ERROR_FILE_NOT_FOUND
    4. FILE_FLAG_RANDOM_ACCESS:提示系统优化缓存策略(针对随机访问模式),提升性能但非必需

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-08-25
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享