
编程
文章平均质量分 85
cpq37
https://cpq37.github.io/
展开
-
也谈为什么面向对象很糟糕
其实我的编程之路应该是自学的:二十年前中学时上过一次微机课,大家照着课本用BASIC播放了音乐,然后编程的神奇勾起了我少年的好奇。后来微机课基本没上了,自己去新华书店买了一本PASCAL编程的书籍,因为没有电脑,这本书放在我的枕边,始终不得入门。但到高中时,神奇的事情发生了:某天突然无聊又捧起这本书看,看着看着我突然发现我看懂了,而且学会了编程。事情就是这么神奇:我是通过PASCAL学会的编程,但...原创 2019-12-20 15:04:42 · 752 阅读 · 0 评论 -
调不尽的内存泄漏,用不完的Valgrind
调不尽的内存泄漏,用不完的ValgrindValgrind 安装1. 到www.valgrind.org下载最新版valgrind-X.X.X.tar.bz22. 解压安装包:tar –jxvf valgrind-3.2.3.tar.bz23. 解压后生成目录valgrind-3.2.34. cd valgrind-3.2.35. 运行./autog转载 2014-11-14 14:41:02 · 5670 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝与浅拷贝)详解
深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2014-11-01 10:18:27 · 691 阅读 · 1 评论 -
从汇编看c++中默认构造函数的使用分析
c++中,如果为一个类没有明确定义一个构造函数,那么,编译器就会自动合成一个默认的构造函数。下面,通过汇编程序,来看一下其真实情况转载 2014-11-01 10:13:56 · 729 阅读 · 0 评论 -
Qt 内存管理机制
这篇文章首先发布于我的主页 http://www.devbean.info,以后也会直接发布在那里。现在有 Flex 4 的一篇和 《从 C++ 到 Objective-C》系列,感谢大家支持!强类型语言在创建对象时总会显式或隐式地包含对象的类型信息。也就是说,强类型语言在分配对象内存空间时,总会关联上对象的类型。相比之下,弱类型 语言则不会这样做。在分配了内存空间之后,有两种方法转载 2014-10-15 14:01:20 · 697 阅读 · 0 评论 -
c++对象池内存池实现
以前自己写过一个内存池,采取FreeList计数,总感觉那个性能无与伦比。但上次看一个人测试基于boost::object_pool,和CRT的new/delete的速度比较。在10000*10000次的循环中,简单的对三个大小不一样的class做了new/delete的操作,并简单做些加减。然后那人说1亿次的操作,boost::object_pool是3秒,传统的是93秒。转载 2014-09-26 17:30:06 · 2853 阅读 · 1 评论 -
C++内存池的管理
原帖与示例代码地址:http://www.codeproject.com/KB/cpp/MemoryPool.aspx 译者点评:一个简单的内存池实现,附有源码,简单易懂,适合入门。 概述在c/c++中,内存分配(如malloc或new)会使用很多时间。一个程序会随着长时间的运行和内存的申请释放而变得越来越慢,内存也会随着时间逐渐碎片化。特别是高频率转载 2014-09-26 17:29:26 · 614 阅读 · 0 评论 -
c++内存池实现
原文:http://blog.youkuaiyun.com/neustar1/article/details/7478311利用C/C++开发大型应用程序中,内存的管理与分配是一个需要认真考虑的部分。本文描述了内存池设计原理并给出内存池的实现代码,代码支持Windows和Linux,多线程安全。内存池设计过程中需要考虑好内存的分配与释放问题,其实也就是空间和时间的矛盾。有的转载 2014-09-26 17:26:21 · 602 阅读 · 0 评论 -
内存池的C++实现。
最近在学习c++程序性能优化,读到内存池部分。自己动手写了一个,小小测试了一下应该没有问题。内存块MemoryBlock声明文件[cpp] view plaincopy#pragma once #define USHORT unsigned short #define ULONG unsigned long #inc转载 2014-09-26 16:53:02 · 685 阅读 · 0 评论 -
C++中一个高效的内存池实现
在高效C++编程中看到一个不错的内存池实现方案,这里共享下,大家看看有什么不足。代码很简单,如下:templateclass CMemoryPool{ public: enum { EXPANSION_SIZE = 32}; CMemoryPool(unsigned int nItemCount = EXPANSION_SIZE)转载 2014-09-23 17:01:30 · 768 阅读 · 2 评论 -
vld for memory leak detector (release version)
有没有这样的情况,无法静态的通过启动和退出来查找内存泄露,比如网络游戏,你总不能直接关游戏那玩家怎么办? 现在vld支持release,我们可以动态的找。1.在release版本使用vld了。#define VLD_FORCE_ENABLE#include 2.支持gm命令来开启和关闭vld,并且report__declspec(dllimport) voi转载 2014-11-18 11:20:05 · 1866 阅读 · 0 评论 -
C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一转载 2014-11-16 23:43:27 · 660 阅读 · 0 评论 -
Windows CE内存管理
内存管理 如果你在写Windows CE 程序中遇到的最重要的问题,那一定是内存问题。一个WinCE 系统可能只有4MB 的RAM,这相对于个人电脑来说是十分少的,因为个人电脑的标准配置已经到了128MB 甚至更多。事实上,运行WinCE 的机器的内存十分缺乏,以至于有时候有必要在写程序的时候为节约内存而牺牲程序的整体性能。 幸运的是,尽管WinCE系统的内存很小,但可用来转载 2014-12-03 19:35:14 · 907 阅读 · 0 评论 -
信号槽原理
闲来无事,模仿QT的信号槽函数写了一段代码:#include <iostream>using namespace std;typedef void (*slotType)(void);#define emitclass A{public: A(){slot = NULL;} static void Clicked(void) { sl...原创 2019-08-09 12:44:38 · 428 阅读 · 0 评论 -
Goto语句还是被认为是有害的吗?
Is goto Still Considered Harmful?By Larry Seltzer, March 11, 2014Apple's recent security bug was traced to a spurious goto. But that still doesn't resolve the debate over its use.最近苹果的安全翻译 2015-08-07 18:27:47 · 9396 阅读 · 0 评论 -
Linux下缓冲区溢出攻击的原理及对策
本文首先向读者讲解了Linux下进程地址空间的布局以及进程堆栈帧的结构,然后在此基础上介绍了Linux下缓冲区溢出攻击的原理及对策。前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,转载 2015-01-26 18:34:41 · 722 阅读 · 0 评论 -
缓冲区溢出攻击实验
【实验要求】1)基本要求:编写一个能实现缓冲区溢出(整数溢出或堆栈溢出)的程序。语言不限(c,c++,c#,java等均可),环境也不限(linux或windows等)。并在调试状态下(如linux的gdb或其他集成开发环境的调试命令)查看寄存器和相应存储单元内容的变化情况。分析并解释缓冲区溢出的原因。提交:分析文档(要给出调试过程和运行过程中的一些必要的截图)转载 2015-01-26 18:33:48 · 1916 阅读 · 0 评论 -
缓冲区及缓冲区溢出
这几天看到经常看到缓冲区这个概念,今天上网搜了一下,对缓冲区作出以下解释。 缓冲区 1,概念篇 缓冲区是一个逻辑上的概念,几乎所有的存储设备都有缓冲区,比如硬盘,系统可以指定给硬盘一定量的缓冲区,直到该区存满数据后再写入硬盘,这样可以避免频繁写盘。但大多数情况下,我们所说的缓冲区是指物理上的缓存。比如现在常见的160G串口硬盘通常的缓存就是8M,DVD刻录转载 2015-01-26 18:31:51 · 1256 阅读 · 0 评论 -
使您的软件运行起来: 防止缓冲区溢出
C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库。最有害的罪魁祸首是不进行自变量检查的、有问题的字符串操作(strcpy、strcat、sprintf 和 gets)。一般来讲,象“避免使用 strcpy()”和“永远不使用 gets()”这样严格的规则接近于这个要求。今天,编写的程序仍然利用这些调用,因为从来没有人教开发人员避免使用它们。某些人从各处获得某个提示,但即使是优秀的开发人转载 2015-01-23 13:38:10 · 599 阅读 · 0 评论 -
(Memory and Resource) Leak detection for WinCE
Download source and vcproj tarball /wo crtdbg4wince - 14.7 KBIntroduction(Note: this article deals with alpha 0.06 or higher of http://sourceforge.net/projects/crtdbg4wince/ project)Reso转载 2014-12-05 10:33:18 · 1285 阅读 · 0 评论 -
常见C++内存池技术
原文出处:http://www.cppblog.com/weiym/archive/2013/04/08/199238.html转载 2014-09-26 14:07:26 · 604 阅读 · 0 评论 -
c++内存分配优先使用内存池
认识一下new和delete的开销:new和delete首先会转调用到malloc和free,这个大家应该很熟识了。很多人认为malloc是一个很简单的操作,其实巨复杂,它会执行一个系统调用,从用户态转到内核态,该系统调用会锁住内存硬件,然后通过链表的方式查找空闲内存,如果找到大小合适的,就把用户的进程地址映射到内存硬件地址中,然后释放锁,返回用户态。delete是一个反过程。相对转载 2014-09-20 17:01:56 · 668 阅读 · 0 评论 -
内存管理内幕
转载自 https://www.ibm.com/developerworks/cn/linux/l-memory/转载 2014-09-20 16:59:10 · 579 阅读 · 0 评论 -
WinInet编程中如何使用异步
<br />在WinInet编程中,同步的使用方法如下:<br />InternetOpen->InternetOpenUrl->HttpQueryInfo->InternetReadFile->InternetCloseHandle;在InternetOpenUrl和InternetReadFile时会导致程序阻塞,知道操作完成,同步的好处就是比较简单,调试方便。<br />异步的使用方法如下:<br />1)InternetOpen,需指定是异步;<br />2)InternetSetStatusCal转载 2010-11-18 16:59:00 · 2596 阅读 · 2 评论 -
线程中CreateEvent和SetEvent及WaitForSingleObject的用法-------wince里面的中断IST经常使用
<br />线程中CreateEvent和SetEvent及WaitForSingleObject的用法<br />首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.<br />CreateEvent <br />函功能描述:创建或打开一个命名的或无名的事件对象.<br />EVENT有两种状态:发信号,不发信号。 <br />SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 <br />WaitForSingle转载 2010-11-18 15:00:00 · 1148 阅读 · 1 评论 -
C语言写的多线程下载器
<br />1.软件介绍 <br /><br />qdown是一款开源的HTTP多线程下载软件。 <br />特点:多线程,支持服务器重定向,支持断点续传。 <br /><br />平台:Solaris/FreeBSD/Windows(CygWin) <br /><br />作者:小孙 <br /><br />2.如何使用 <br /><br />usage: qdown URL [thread_amount] [save as] <br />example: qdown http://www.baidu.转载 2010-11-18 10:11:00 · 1443 阅读 · 0 评论 -
STL (Standard Template Library)标准模板库 C++
<br />以下资料均来自网络上的 。<br /> 标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。<br /> STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器),几乎转载 2010-11-18 09:26:00 · 920 阅读 · 0 评论 -
VC图片的半透明处理
<br />半透明原理: <br /> 假设LCD是256色的。颜色格式为332(RGB) <br /> 显存中的每一个字节的数据对应一个象素点。 <br /> 在数据写入显存之前,读取相应相素点值,然后与新的数据按一定的规则混合之后,再写入相应像素点的显存。 <br /><br /> 这样主要问题关键是混合算法。 <br /> 混合算法目前在游戏上常用到的算法是AlphaBlend。计算公式如下 <br /> 假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C就是B和A的转载 2010-10-11 17:30:00 · 870 阅读 · 0 评论 -
CString、TCHAR*、char*转换
CString 转化为 char*CString strData = _T("ni hao");int len = WideCharToMultiByte(CP_ACP, 0, strData, -1, NULL, 0, NULL, NULL);char* szTarget = new char[len + 1];memset(szTarget, 0, len + 1);WideCharToMultiByte (CP_ACP, 0,strData, -1, szTarget, len, NU转载 2010-08-26 11:45:00 · 3622 阅读 · 1 评论 -
使用J2ME MMAPI开发移动多媒体应用技术
<br /> 为了使移动装置能够访问这些不同格式的媒体数据,必须为其设计一个规范化的、强大的和可扩充的应用接口。J2ME中就提供了一套为规范的播放和录制音频或视频接口,即Mobile Media API (MMAPI)。本文详细介绍MMAPI的体系结构和用法,供大家参考!<br />一、引言<br />在当前世面上存在着大量的不同媒体格式,并且还有许多新的媒体格式即将被建立。为了存储和传输这些不同的媒体格式,存在着了许多不同格式的存储设备和传输协议,例如大家常使用的媒体存储设备(如CD、VCD以及DVD)转载 2010-07-07 11:46:00 · 619 阅读 · 0 评论 -
J2ME Property属性表
在J2ME开发中,我们经常需要和手机系统进行交互,获得一些和系统相关的信息,在J2ME API设计中,提供了一系列的系统属性,可以让我们来进行获得,下面就一一进行介绍。表1 CLDC、MIDP和JTWI属性属性名称属性作用microedition.profiles代表手机支持的MIDP版本,返回格式值为“MIDP-1.0”或“MIDP-2.0”microedition.configuration代表手机支持的CLDC版本,返回格式值为“CLDC-1.0”或“CLDC-2.0”microedition转载 2010-06-17 15:08:00 · 419 阅读 · 0 评论 -
20101119
<br />template<class T><br />class ThreadSafe_U<br />{<br />public:<br /> ThreadSafe_U(){<br /> cnt = 0;<br /> InitializeCriticalSection(&cs);<br /> mp = (T)NULL;<br /> }<br /> ~ThreadSafe_U(){<br /> Lock();<br /> DeleteCriticalSection(&cs);<br /> }<b转载 2010-11-19 15:06:00 · 658 阅读 · 0 评论 -
WinInet 编程 参考
<br />http://www.codeproject.com/KB/IP/asyncwininet.aspx#<br />http://support.microsoft.com/kb/839873<br /> <br /> <br />do not ask me why.i dont know<br /> <br />FILE: AsyncWinINet.h<br /> <br />#include <wininet.h><br />#include <mmsystem.h><br /> <br />原创 2010-11-23 11:43:00 · 977 阅读 · 0 评论 -
linux汇编之——(7)反汇编存储及其他
1 数组越界int main(void){ inta[1]; a[0] =2; a[1] =3; return1;}反汇编objdump080483b4 : 80483b4: 55 push %ebp 80483b5: 89 e5原创 2013-05-24 15:45:05 · 803 阅读 · 0 评论 -
linux汇编之——(6)反汇编条件控制
C语言的条件控制语句,在汇编里说白了就是通过对ZF零标志位进行判断,然后由跳转指令来实现逻辑分支。1 条件语句ifint main(void){ int a; if(a) return 1; else return 0;}反汇编代码如下080483b4 : 80483b4: 55原创 2013-05-24 15:32:35 · 731 阅读 · 0 评论 -
linux汇编之——(5)反汇编运算样例
1 添加赋值语句赋值int main(void){ int a=1; //a =1; return0;}反汇编如下:(gdb) disas mainDump of assembler code for function main: 0x080483b4 : push %ebp 0x080483b5 :原创 2013-05-24 15:10:40 · 905 阅读 · 0 评论 -
linux汇编之——(4)最简C代码
在最简代码的基础上进行 反汇编看汇编代码 int main() { return 0; } 编译该程序,产生二进制文件: # gcc test0.c -o test0 # file test0 test0: ELF 32-bit LSBexecutable 80386 Version 1, d原创 2013-05-24 14:57:15 · 700 阅读 · 0 评论 -
linux汇编之——(3) 汇编基础知识
一、寄存器总共有14个16位寄存器,8个8位寄存器通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器) CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL用于原创 2013-05-24 14:43:45 · 643 阅读 · 0 评论 -
linux汇编之——(2)IDA远程调试LINUX文件
拷贝linux-server到linux系统并运行。提示缺少libstdc++.so.5在ubuntu系统下输入:apt-get install libstdc++.so.5或者:apt-getinstall libstdc++5不成功的情况下 在http://packages.ubuntu.com/搜索“libstcc++5”获得下载页面列表如:http://packag原创 2013-05-24 13:49:13 · 1998 阅读 · 0 评论 -
linux汇编之——(1)ELF:Linux可执行程序文件格式
Windows的应用程序的格式是PE格式文件,LINUX的是ELF(“Executable and Linking Format”)文件格式。 一个手工打造的ELF文件,代码如下: 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 60 00 48 80 34 00 00 00原创 2013-05-24 13:43:23 · 1093 阅读 · 0 评论