- 博客(23)
- 收藏
- 关注
转载 .NET对象的创建、垃圾回收、非托管资源的手动处理
本篇用来梳理对象的创建、垃圾的回收,以及非托管资源的手动处理。→首先运行应用程序,创建一个Windows进程。→CLR创建一块连续的虚拟地址空间,这个地址空间就是托管堆。而且,这个地址空间最初并没有对应的物理存储空间。虚拟地址空间分成2段。一个区段是普通堆,也叫GC堆,大小小于85000字节的引用类型对象的实例被分配在这里;另一个是大对象堆,大小大于等于85000字节的引用类型对象
2016-12-11 16:28:47 586
转载 从编译器的角度分析继承中的虚函数
下面首先以一个简单的动物继承体系为例,来进行说明: public abstract class Animal { public abstract void ShowType(); public void Eat() { Console.WriteLine("Animal a
2016-12-11 15:39:25 268
转载 C++继承中的内存布局
本文原文出处为MSDN。如果你安装了MSDN,可以搜索到C++ Under the Hood。否则也可在网站上找到http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarvc/html/jangrayhood.asp。一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC
2016-12-11 14:40:57 472
转载 进程与线程的区别?
进程是什么?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU
2016-12-08 16:15:50 202
原创 dup和dup2的使用方法
/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/#include #include #include //STDIN_FILENO标准输入描述符(0)//STDOUT_FILENO标准输出描述符(1)//STDERR_FILENO标准错误描述符(2)int main(void){int n_fd;int s_fd;int
2016-12-06 15:16:17 10285
转载 编译和链接的区别(转载自从入门到放弃的博客http://blog.sina.com.cn/floatingstars)
一个源程序到一个可执行程序一般需要经过预编译、编译、汇编和链接四个步骤。当我们使用IDE编写代码的时候,这些过程IDE都会默认的为我们完成。但是了解这些过程都是做什么是很有必要的。1、预编译 预编译过程主要处理源文件中以“#”开始的预编译指令。比如“#include”,“#define”等,主要处理规则如下:将所有的“#define”删除,并且展开所有的宏定义
2016-12-03 17:52:11 716
转载 select、poll、epoll之间的区别总结摘自http://www.cnblogs.com/Anker/p/3265058.html
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用
2016-11-28 22:40:50 427
转载 return、exit和abort的区别
exit():在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。abort():调用时,不进行任何清理工作。直接终止程
2016-11-18 15:46:47 2603
转载 Linux中用于更改光标和文本属性的tput命令使用详解
tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。通过使用 tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。与 UNIX 中的大多数命令一样,tput 命令既可以用在 shell 命令行中也可以用在 shell 脚本中。为让您更好地理解 tput,本文首先从命令行讲起,然后紧接着讲述 shell 脚本示例。tput命令将通过
2016-11-16 20:03:18 1388
原创 const限定形参的重载
#include using namespace std;class A {public:void func(int *p){cout }void func(int *const p){cout }};int main(void){A a;int c = 100;a.func(&c);return 0;
2016-11-14 16:04:18 335
转载 面向对象的三个基本特征摘要
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
2016-11-14 11:42:43 253
转载 sscanf和scanf用法摘要
Int sscanf( const char * src, const char * format, ...);int scanf( const char * format, ...);这两个函数很相似,只是第一个函数以src作为输入,而第二个函数以标准输入STDIN读取输入;format 是格式控制字符串,它包含控制字符(如:%d,%i,%s等),空白字符(如:空格、制表符\t、回车换行符\n 或其连续组合)以及非空白字符;...是一组指针变量,是上述函数用来保存结果值的;返回值为被成功赋值的指
2016-11-12 17:03:39 1498
转载 关于sprintf和snprintf的正确使用摘要
关于sprintf和snprintf的正确使用。考虑以下有缺陷的例子:void f(const char *p){ char buf[11]={0}; sprintf(buf,"%10s",p); // very dangerous printf("%sn",buf);}不要让格式标记“%10s”误导你。如果p的长度大于10个字符,那么sp
2016-11-12 16:20:44 749
转载 c++中必须在类初始化列表中初始化的几种情况摘要
1. 类成员为const类型2. 类成员为引用类型#include using namespace std;class A{ public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout "hello:" " " endl;} private:
2016-11-11 20:39:26 490
转载 malloc和new的区别是摘要
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于
2016-11-11 19:42:58 238
转载 动态绑定和静态绑定(虚函数)
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例:[cpp] vi
2016-11-10 20:35:14 392
转载 关于C++成员函数和运算符的重载
1.为啥要重载操作符:通过重载操作符,程序员可以针对“类”类型的操作数定义不同的操作符版本。良好的操作符定义可以使class类型的使用想内置类型一样直观简洁,使用重定义的操作符而不是命名函数使得程序可以用表达式代替函数调用,使程序编写和阅读更容易~2.哪些不能重载:: .* . ?: 这些不能重载3.需要注意的地方:
2016-11-10 19:36:46 4022
转载 九大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序
2016-11-10 19:19:59 1162
原创 虚析构函数与内存泄漏
1、当申请的动态内存指针是基类指针时,需考虑内存的泄漏情况如下代码:#include using namespace std;class A {public:A(){cout }~A(){cout }};class B:public A{public:B(){cout }~B(){cout
2016-11-10 18:18:57 506
转载 c++函数重载摘要
函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。下面三组定义本质是相同的,不是重载:1)int sum (int &a); 和 int sum (int &);2) int sum (
2016-11-10 16:12:04 233
转载 C++的虚基类,抽象类,虚函数,纯虚函数,virtual
虚基类 在说明其作用前先看一段代码 class A { public: int iValue; }; class B:public A { public: void bPrintf(){cout}; class C:public A { public: void cPrintf(){cout }; class D:public B,publi
2016-11-10 11:59:02 548
转载 Ubuntu中常用的apt和dpkt命令
Ubuntu中常用的apt和dpkt命令apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明、大小、版本等 apt-getsudo apt-get install package 安装包 sudo apt-get install package – - rei
2016-11-10 11:48:24 1274
转载 string/string.h/cstring头文件的区别摘要
1.#include //不可以定义string s;可以用到strcpy等函数using namespace std;#include //可以定义string s;可以用到strcpy等函数using namesapce std;#include //不可以定义string s;可以用到strcpy等函数2.1)文件cstr
2016-11-05 16:01:58 360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人