当前位置: 首页 > wzjs >正文

做静态页面的网站云服务器多网站解析

做静态页面的网站,云服务器多网站解析,wordpress 显示标签代码,专业的高密做网站的文章目录 一、C对象注册系统1、基本原理2、注册信息放入特点段2.1、解决注册项分散问题2.2、实现零手动注册2.3、绕过 C 的静态初始化顺序问题2.4、支持动态扩展(如插件系统)2.5、性能与空间优化2.6、总结 3、使用__declspec(selectany) 避免重复定义3.1…

文章目录

  • 一、C++对象注册系统
    • 1、基本原理
    • 2、注册信息放入特点段
      • 2.1、解决注册项分散问题
      • 2.2、实现零手动注册
      • 2.3、绕过 C++ 的静态初始化顺序问题
      • 2.4、支持动态扩展(如插件系统)
      • 2.5、性能与空间优化
      • 2.6、总结
    • 3、使用`__declspec(selectany)` 避免重复定义
      • 3.1、为什么要使用`__declspec(selectany)`?
      • 3.2、`selectany` 的作用
      • 3.3、正确用法示例

前言:

利用Windows平台特有的编译器链接器特性,实现一个完整的对象注册系统。这个对象注册系统的主要作用是实现类的自动注册和按名称创建对象,是一种简化对象工厂模式的实现。

一、C++对象注册系统

1、基本原理

这个系统将利用以下技术:

  • __declspec(allocate) 将注册信息放入特定段
  • __declspec(selectany) 避免重复定义
  • 链接器提供的段遍历能力

2、注册信息放入特点段

将注册信息放入特定内存段(如 CUSTOBJ$__m)的核心目的是实现编译期自动收集分散的注册项,从而构建全局对象注册表。这种设计的关键原因和优势如下:

2.1、解决注册项分散问题

  • 传统工厂模式的缺陷: 需要手动维护一个中心化注册表(例如在 .cpp 中显式调用
    RegisterClass),新增类时必须修改注册代码,违反开闭原则。
  • 特定段的优势:通过将注册项分配到统一段中,链接器会自动收集所有编译单元中的注册信息,无需手动维护注册代码。

2.2、实现零手动注册

  • 自动注册机制:宏 REGISTER_CLASS(MyClass) 在类定义处展开时,会将注册信息(如类名、构造函数)放入特定段。
    // 自动生成并放入 CUSTOBJ$__m 段
    __declspec(allocate("CUSTOBJ$__m")) 
    const ObjectRegistryEntry MyClassEntry = {"MyClass", &CreateMyClass};
    
  • 运行时初始化:程序启动时,注册系统只需遍历该段内容即可获取所有类的注册信息,无需显式调用注册函数。

2.3、绕过 C++ 的静态初始化顺序问题

  • 传统静态变量的风险:若用全局静态变量注册,不同编译单元的初始化顺序不确定,可能导致注册时访问未初始化的依赖。即:注册系统访问全量的全局静态对象时,无法保证这些全局对象都已经初始化。
  • 特定段的解决方案:段内数据由链接器物理排列,注册系统通过遍历段地址(而非依赖静态初始化)获取所有注册项,完全规避初始化顺序问题

2.4、支持动态扩展(如插件系统)

  • 跨模块(DLL)兼容性: 插件只需用相同宏注册类,其注册信息会被放入同名的段中。主程序通过合并所有模块的段内容,自动识别插件中的类
  • 示例流程
    主程序启动 → 扫描所有DLL的 CUSTOBJ$__m 段 → 合并注册表 → 通过类名创建任意模块中的对象
    

2.5、性能与空间优化

  • 高效查询:注册表初始化时,只需一次线性扫描段内存即可构建哈希表,后续对象创建为 O(1) 复杂度。
  • 减少冗余:段机制直接利用编译器/链接器能力,比运行时动态注册(如维护全局 std::map)更节省内存。

这种设计本质上是利用编译器和链接器的能力,在二进制层面实现类似反射的功能。

2.6、总结

  • 自动化:避免手动维护注册逻辑,实现「声明即注册」
  • 确定性:规避静态初始化顺序的不可控性
  • 扩展性:天然支持动态加载的插件架构
  • 高效性:利用链接器原生支持的低成本收集机制

这种模式广泛用于游戏引擎(Unreal的UClass)、序列化框架(Protocol Buffers)等需要动态类型管理的系统。

3、使用__declspec(selectany) 避免重复定义

在基于特定段实现的C++对象注册系统中,__declspec(selectany) 起着关键作用。下面解释下为什么要使用它以及不使用会带来什么问题?

3.1、为什么要使用__declspec(selectany)

当注册宏 REGISTER_CLASS(MyClass) 在头文件中展开时,会在每个包含该头文件的编译单元(.cpp文件)中生成一个 相同的全局注册变量。如果不使用selectany编译会失败,例如:

// MyClass.h
#define REGISTER_CLASS(Class) \__declspec(allocate("MyRegSegment")) \const Registration Class##_entry{ #Class };  // 全局变量!REGISTER_CLASS(MyClass);  // 展开后:每个包含此头文件的.cpp都会生成 MyClass_entry

3.2、selectany 的作用

  • 合并重复定义:告诉链接器:“所有编译单元中看到的这个符号都是相同的,任选一个保留,其他的丢弃”。
  • 避免链接冲突:确保即使多个.cpp文件包含同一头文件,最终程序中也只保留一份注册项。

3.3、正确用法示例

#define REGISTER_CLASS(Class) \__declspec(allocate("MyRegSegment")) \__declspec(selectany) \  // ← 关键!const Registration Class##_entry{ #Class };

使用__declspec(selectany) 是Windows下实现自动化注册系统的经典模式,权衡了简洁性与可靠性。


文章转载自:

http://zW9dhyjS.tfcwj.cn
http://PQyTVtgS.tfcwj.cn
http://T78KVnPG.tfcwj.cn
http://J1eUmRCF.tfcwj.cn
http://sYwkP9fm.tfcwj.cn
http://1w2lAWxB.tfcwj.cn
http://SbdOFieK.tfcwj.cn
http://AcpeoNCW.tfcwj.cn
http://3e6z0ceT.tfcwj.cn
http://CxoJDTeE.tfcwj.cn
http://0BAJ1Aqh.tfcwj.cn
http://XgU2L1Nj.tfcwj.cn
http://NuRA2OPB.tfcwj.cn
http://w57WvmT9.tfcwj.cn
http://69sMlTzI.tfcwj.cn
http://t573MCak.tfcwj.cn
http://YYwI153c.tfcwj.cn
http://8tRo8zk3.tfcwj.cn
http://1kqQtTjy.tfcwj.cn
http://84cV7wLi.tfcwj.cn
http://uDlQiDio.tfcwj.cn
http://XiUM4tDE.tfcwj.cn
http://KEm3Wcn5.tfcwj.cn
http://78WlPIxB.tfcwj.cn
http://yKT7kBO4.tfcwj.cn
http://k23vcDMB.tfcwj.cn
http://30qAZi95.tfcwj.cn
http://nL0syI1v.tfcwj.cn
http://DMNr23QC.tfcwj.cn
http://IdLZWmzu.tfcwj.cn
http://www.dtcms.com/wzjs/663301.html

相关文章:

  • 网站ui 特点宣传片制作公司保定
  • 溧阳 招网站开发兼职成立公司需要具备什么条件
  • 建设银行网站怎样查询贷款信息吗免费做简历的网站
  • 做网站都要学什么做网站多少钱赚钱吗
  • 做网站优化有什么好处完整网站开发
  • 动力网站农村网站建设的意义
  • 谷歌seo 外贸建站怎么做教育类型的网站
  • 百度网站广告怎么做网站优化建设绵阳
  • 做网站九州科技做印量调查的网站
  • 网站建设的上市公司番禺公司网站建设
  • 大学教学应用网站开发现状wordpress页面导航菜单
  • 网站设计规划图网站开发常用语言的优劣势
  • 网站空间在哪买在哪里做网站效果好
  • 宽屏营销型网站源码广州设计网页
  • 北京网站建设建站wordpress用户爆破
  • 开源网站建设工具网站seo设置是什么
  • 社保在哪个网站做增员网站建设资源
  • 专业做婚纱摄影网站网络设计师培训平台
  • 拒绝做网站的理由企业官方网站系统建设
  • 重庆外贸网站建设公司电影网站做淘客
  • 怎么更改网站栏目id陕西建设机械股份有限公司网站
  • 在那儿能找网站建设建站工具论坛
  • 做旅游的网站 优帮云互联网推广营销方案
  • 长沙网站定制一级a做爰片 网站就能看
  • 常熟有哪些网站建设公司个人网站被黑了
  • 包头网站建设公司哪家好做网站推广用优化还是竞价
  • 大网站成本免费在线观看电影大全
  • php源码下载网站沈阳关键字优化公司
  • 买2g 空间做下载网站wordpress媒体文件
  • 网站怎么做更新吗天水有做网站的地方吗