![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
daphnis
这个作者很懒,什么都没留下…
展开
-
C/C++的内存碎片、内存泄漏以及内存越界问题的解决方案
内存问题一直以来都是C/C++开发中比较麻烦的问题,总的来讲,可以分成内存碎片、内存泄漏和内存越界这几类其中,以内存越界最为复杂,而且难以定位。下面我们将通过技术手段逐一分析并解决这三个问题。 一、操作系统的内存管理 进程的虚拟内存空间是地址是连续的,整个内存空间以页为单位进行划分,并不是每个页当前都映射了物理地址(commited),应用程序通过操作系统提供的API对内存进行管理,以页为单位,将虚拟内存地址映射到物理地址或者解除虚拟地址和物理地址的映射,某些情况下操作系统也会自动进行这个...原创 2020-07-12 16:19:26 · 3113 阅读 · 0 评论 -
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
C++对象模型(上) 要实现完善的C++反射机制,我们需要深入了解C++的对象模型。但是很遗憾,C++标准并没有明确规定C++对象模型,而是把这个自由度交给了编译器,不同的编译器下产生的对象并不一定是二进制兼容的。不过比较幸运的是主流的编译器实现的方式都大同小异,而且,我们很多时候并不一定需要深入到编译结果,通过宏和模板就能解决大部分的问题。 一、全局函数 全局函数(或者静态函数)是比较容易通过模板获取到函数类型信息的,通过一个模板函数就可以: template< typename...原创 2020-05-20 23:34:27 · 494 阅读 · 0 评论 -
通过C++反射实现C++与任意脚本(lua、js等)的交互(一)
C++的反射机制 C++语言本身是不支持反射机制的,但是我们可以通过一些特殊的手段来实现反射机制。 反射的核心是在于能运行时获取数据的类型信息,总所周知,C++是编译型语言,完整的类型信息只存在于编译时(部分类型信息在开启RTTI后可以在运行时获取),如果要实现完整的反射,只能是基于编译时所产生的数据。通常在标准C++编译器下实现的方式会有以下几种: 一、基于编译产生的调试信息,例如解析pdb文件 二、通过编译器之外的工具分析源文件,获取对应信息 三、通过在代码中嵌入宏来收集相关信息...原创 2020-05-20 10:02:16 · 737 阅读 · 0 评论