- 博客(30)
- 资源 (4)
- 问答 (2)
- 收藏
- 关注
原创 Private Bytes、Working Set、Virtual Size 的区别
进程占用内存、进程申请的内存和进程所依赖的动态库申请的内存总和,不包括进程所依赖的动态库占用的内存、mmap的内存。不一定在物理内存上,可以被交换到磁盘上,所以可以比Working Set大。由于也包括进程依赖动态库所申请的内存,所以不能判断内存泄漏是由进程导致的还是动态库导致的。
2024-05-07 14:11:23
1079
原创 数据结构之跳跃表
跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。
2024-05-07 11:26:09
740
1
原创 大端小端,如何检测
union 共同体所有数据成员是共享⼀段内存的,后写⼊的成员数据将覆盖之前的成员数据,成员数据都有相同的⾸地址。union 的成员数据共⽤内存,并且⾸地址都是低地址⾸字节。int i= 1时:⼤端存储1放在最⾼。位,⼩端存储1放在最低位。当读取char ch时,是最低地址⾸字节,⼤⼩端会显示不同的值。故windows上是小端。
2024-05-07 11:10:16
403
原创 汇编语言初探
Intel语法听起来不会让大家有什么疑问,很显然它是由Intel公司设计的,这里只简单说一下AT&T语法的起源,AT&T公司的前身是贝尔实验室,这里是C语言和Unix系统的诞生地,实验室的科学家们想让汇编语言的语法具有跨平台的特性(注意是语法跨平台,而不是说机器指令跨平台),于是抛开了Intel的语法规范,自己创立了一套汇编语法,这套规范在Unix、Linux和GNU的各种工具中得到了广泛的应用,这套语法用在x86平台下便被称为AT&T风格的x86汇编语言。无论采用哪种语法,都要有。
2024-04-26 10:21:20
730
原创 x86-64函数调用及栈帧原理
子函数调用时,调用者与被调用者的栈帧结构如下图所示:上述过程中,。。在使用高级语言进行函数调用时,由编译器自动完成上述整个流程。对于”Caller Save” 和 “Callee Save” 寄存器的保存和恢复,也都是由编译器自动完成的。需要注意的是,,这种方式便于支持类似于 printf(“%d, %d”, i, j) 这样的使用变长参数的函数调用。通过移动 %rsp 指针来改变帧的大小。%rbp 和 %rsp 之间的空间就是。而过程调用和退出过程,分别使用 call 指令和 ret 指令。
2024-04-26 10:14:21
600
原创 内存检测工具
实际的内存检测工具,往往多种技术并用,在细节上,算法上有所差异,导致工具的性能和准确度各有千秋。DieHarder, Dmalloc为代表,分配内存时,在被分配内存的前后,额外分配内存,并填充特殊的值,释放内存的时候,在被释放的内存里也填充特殊值。是,如果程序需要分配很多的内存,会导致分配很多后面的不可访问的内存页,分配内存次数多,就会运行的很慢。该类工具实现的内存分配函数,除了正常的分配内存,还在后面紧接着分配一个不可访问的内存页。程序如果访问内存越界,就访问到了后面的内存页,触发异常。
2024-04-09 19:38:43
1038
原创 Google Address Sanitizer
ASAN: 内存错误检测工具,在编译命令中添加-fsanitize=address启用LSAN: 内存泄漏检测工具,已经集成到 ASAN 中,可以通过设置环境变量ASAN_OPTIONS=detect_leaks=0来关闭ASAN上的LSAN,也可以使用-fsanitize=leak编译选项代替-fsanitize=address来关闭ASAN的内存错误检测,只开启内存泄漏检查。
2024-04-08 20:13:40
1196
1
原创 Centos常用shell命令
注解:for I in (command);done为for循环的一个常用格式,其中I为变量,可以自己指定。例如经常用到的:查找当前目录30天以前大于100M的LOG文件并删除。例如,把webfile目录(包括里面的文件)压缩为。find –name 主要用于查找某个文件名字,查询占用3306端口的程序PID为10818。查询结果的PID查询占用程序的详细情况。su -切换为root权限用户。查询3306端口的占用情况。
2023-09-15 13:54:45
267
原创 红黑树(RBTree)
循环条件:x!= root && x.color = BLACK,x不是根节点且颜色为黑色收尾操作:将x置为黑色x为父亲的左儿子或右儿子,处理操作是对称的;同样只需要记住左儿子时的操作,即可举一反三x为父亲的左儿子兄弟为红色:将兄弟变成黑色,父节点变成红色;对父节点左旋,恢复左子树的黑色高度,左侄子成为新的兄弟兄弟为黑色,左右侄子为黑色:兄弟变成红色,x指向父节点,继续进行调整兄弟为黑色,右侄子为黑色(左侄子为红色):左侄子变成黑色,兄弟变成红色;
2023-09-08 22:21:15
243
原创 优化程序性能
在这一过程中可能还需要对程序的可读性和运行速度进行权衡。编译技术被分为**“与机器无关”和“与机器相关”**两类。“与机器无关”,使用这些技术时可以不考虑将执行代码的计算机的特性;而“与机器有关”,指这些技术依赖于许多机器的低级细节。编译器必须很小心的对程序只使用安全的优化。即保证优化前后的程序具有相同行为。(但是很明显,编译器没有那么智能,有些情况无法分辨处理,所以我们应该主动写出让编译器好优化的代码)两种指针可能指向同一个内存位置的情况称为内存别名引用,在只执行安全的优化中,编译器必须假设不同的指针可
2023-09-08 22:05:22
77
原创 处理器体系结构
大多数现代电路设计都是用信号线上的高电压和低电压来表示不同的位值。计算对位进行操作的函数的组合逻辑(ALU)存储位的存储器元素(寄存器)控制存储器元素更新的时钟信号逻辑门是数字电路的基本计算元素,它们产生的输出,等于它们输入位值的某个布尔函数。将很多逻辑门组合成一个网,就能构建计算块,称为组合电路。(相当于一个表达式)算术/逻辑单元(ALU)两个数据输入及一个控制输入。根据控制输入的设置,电路会对数据输入执行不同的算术或逻辑操作。
2023-09-08 22:04:11
89
原创 linux安装Samba服务器及配置(windows及ios均可连接互传文件),解决多设备共享文件的问题
linux安装Samba服务器及配置(windows及ios均可连接互传文件),解决多设备共享文件的问题
2023-02-21 14:39:19
1502
原创 编译原理运行时刻环境
编译原理运行时刻环境运行时存储组织概述编译程序是将源程序的算法描述部分和数据说明部分,分别翻译成机器目标代码和数据存储单元,最终获得目标程序。目标程序在目标机环境中运行时,都置身于自己的一个运行时存储空间。在基于操作系统之上运行的情况下,目标程序将在自己的逻辑地址空间内运行并存储数据。编译程序在生成代码时,负责明确各类对象在逻辑地址空间是如何存放的,以及目标代码运行时,如何使用逻辑地址空间。在编译过程中,源程序的对象地址分配往往是相对于运行存储空间的偏移量,对象访问采用“基地址+偏移量”寻址方式进行
2022-05-19 11:13:18
1743
原创 关于GetProcAddress返回错误代码为127的解决方案
关于GetProcAddress返回错误代码为127的解决方案关于GetProcAddress返回错误代码为127的解决方案运行期间显示地去加载DLL库,当LoadLibrary可以返回当前DLL模块的句柄时,而GetProcAddress取得函数的地址为空时。通过GetLastError去获取错误代码为127,很有可能是动态链接库工程里面函数声明的没有加extern “C”。解决方案只针对自己写的dll项目提供解决方案,如果是拿的第三方的动态链接库出这样的问题,不在此解决方案中。通常写dll工
2022-05-06 09:59:47
4073
原创 类设计的核查表
类设计的核查表选自C++沉思录类需要构造函数吗?有些类很简单,它们的结构就是它们的接口,此刻不需要构造函数,但是,我们要关心足够复杂的类,它们需要构造函数来隐藏它们内部的工作方式。数据成员是私有的吗?通常使用共有的数据成员不是什么好事,因为类设计中无法控制何时访问这些成员;templete<class T>class Vector{public: int length;}如果类设计者将矢量的长度当做一个成员变量,那么就必须保证这个成员变量在任何时候都能正确反映
2022-04-19 10:01:51
130
原创 编译原理基础_龙书学习记录
编译原理基础语言处理器编译器是一种程序,可以阅读源程序(某一种语言编写)并将其翻译成目标程序(目标语言编写)。编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误。解释器是另一种常见的语言处理器。它并不通过翻译的方式生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。编译器,和解释器(Interpreter) 是常见的两种形式。主要区别:目标语言翻译成一种能被计算机执行的形式,完成这一过程的软件系统称为编译器(compiler)解释器并不同编译器一样将源
2022-04-19 09:55:32
378
原创 动态链接库(DLL)
动态链接库(DLL)什么叫库? 库是写好的,现有的,成熟的,可以复用的代码。本质上来说库是一种可执行代码的二进制形式,可以被操作系统装载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 所谓静态、动态是指链接过程 。将一个程序编译成可执行程序的步骤: 静态库 【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o/.obj与引用到的库一起链接打包到可执行文
2017-02-20 11:30:03
918
1
原创 COM组件的接口和对象
一、 前言 在COM规范中,最基本的两个要素就是对象与接口,因为COM就是由这两者来共同实现的。COM对象在组件中是被封装起来的,客户代码只能通过接口来访问COM对象并享受其服务,由于客户与COM直接打交道的是COM接口,所以COM接口是COM最关键的要素。COM规范的核心内容就是对接口的定义,甚至可以说“在COM中接口就是一切”。组件与组件之间、组件与客户之间都要通过接口进行交互。接口成员函数
2017-02-07 17:21:04
14458
转载 CCapture directshow 视频捕获类
本文来自:http://blog.youkuaiyun.com/xgx198831/article/details/7284618// Capture.h for class CCapture #include #include #include #if !defined(CAPTURE_H_________) #define CAPTURE
2016-11-27 16:20:19
882
原创 C++虚函数的实现机制
C++虚函数的实现机制C++中的虚函数的作用主要是实现了多态的机制,多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 什么是虚函数?
2016-08-29 16:11:41
812
gtest-1.70.zip
2016-11-27
CreateControl创建成功后,但窗口句柄为NULL????
2017-02-17
任务管理器结束进程的时候,进程一直存在,这是为什么?
2016-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人