
C++
tuhuolong
足球,NBA
展开
-
C/C++ 声明 定义 【T】
原创 2013-05-28 16:10:29 · 729 阅读 · 0 评论 -
删除(delete)空指针是安全的=>指针初始化为0或有效内存(new)
原创 2011-10-06 11:08:32 · 969 阅读 · 0 评论 -
const由编译器来实现
原创 2011-10-08 09:21:54 · 473 阅读 · 0 评论 -
【virtual】"等到运行时再决定调用哪个函数";【inline】"在编译期间将调用之处用被调函数来代替"
原创 2011-10-08 14:57:48 · 515 阅读 · 0 评论 -
C++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
static_cast(可能不安全):一般、对象指(引)上行/下行转换dynamic_cast(运行时的安全检查--抛出异常/NULL):对象指(引)上行/下行转换const_cast: 主要针对const和volatile的转换. reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。http://www.cpl转载 2011-06-23 16:08:00 · 605 阅读 · 0 评论 -
strcpy和strncpy
char * __cdecl strcpy(char * dst, const char * src){ char * cp = dst; while( *cp++ = *src++ ); return(原创 2011-10-03 17:46:29 · 435 阅读 · 0 评论 -
C++数据内存分布
1、堆(heap):程序员控制(分配释放,若否:操作系统释放),不连续内存2、栈(stack):函数参数、局部变量,编译器控制(分配释放),连续内存3、全局(静态)区:全局、静态变量4、常量区:常量字符串...5、代码区:函数体的二进制代码(函数只占一块内存)原创 2011-09-19 09:54:06 · 463 阅读 · 0 评论 -
C++STL容器简介
C++ Standard Template LibraryThe C++ STL (Standard Template Library) is a generic collection of class templates and algorithms that allow转载 2011-09-27 15:29:07 · 748 阅读 · 0 评论 -
dup和dup2函数
int dup2(int fd):复制(返回)文件句柄fdint dup2(int fd1, int fd2):复制句柄fd1到fd2上,返回句柄fd2int main(void){int fd, save_fd;char msg[] = "Thi转载 2011-09-26 10:26:43 · 686 阅读 · 0 评论 -
malloc,calloc和realloc函数
malloc:分配内存,不初始化calloc:清零分配,初始化为0realloc:重新分配,不初始化原创 2011-09-26 11:16:48 · 811 阅读 · 1 评论 -
C++和Java的属性访问和方法调用 效率比较
属性访问----C++快于JavaJVM访问对象属性时(字节码OP_IGET_/OP_SGET_),会先通过属性名字字符串去查ClassObject元数据中属性的偏移(通过属性名字符串找到ClassObject中Field,再取保存在Field中属性在对象中的偏移,最后访问属原创 2011-05-19 10:54:00 · 1477 阅读 · 0 评论 -
C++和Java区别
C++ for Java ProgrammersBarbara Staudt LernerSeptember 1998C++ was developed in the early 1980s. Its goal was to introduce object-orientation to C while maintaining backwards compatibility转载 2011-06-12 21:57:00 · 1648 阅读 · 0 评论 -
重载new操作符
void * operator new(size_t size) {if (size == 0) { // 处理0字节请求时,size = 1; // 把它当作1 个字节请求来处理}while (1) {分配size 字节内原创 2011-10-06 13:21:12 · 571 阅读 · 0 评论 -
纯虚函数竟然可以有实现体(但无任何实用价值,声明成普通虚函数就可以了)
class A {virtual void foo()=0;}void A::foo(){}原创 2011-10-08 16:53:44 · 934 阅读 · 0 评论 -
字符编码:ASCII,Unicode(UTF-8)
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英转载 2011-09-02 16:32:49 · 476 阅读 · 0 评论 -
makefile的选项CFLAGS和LDFLAGS
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。先来看几个相关的环境变量:PATH、LDFLAGS、CFLAGSPATH:大家应该都很熟悉。安装一个包后可能会在安装目录建立一个bin目录,里面都是些可执行程序,为了让系统能找到这些程序,就需要我们把该路径加入到PATH环境变量中。下面会讲到如何转载 2012-08-08 14:30:55 · 18180 阅读 · 0 评论 -
(makefile).PHONY 伪目标
原创 2012-05-18 11:59:37 · 689 阅读 · 0 评论 -
error: invalid use of incomplete type 'XXXX' ;error: forward declaration of 'XXXX' 声明改为包含头文件
error: invalid use of incomplete type 'XXXX' error: forward declaration of XXXX声明改为包含头文件class XXXX; #include "XXXX.h"原创 2012-05-17 13:59:42 · 7080 阅读 · 1 评论 -
gcc 的visibility
-fvisibility=default|internal|hidden|protectedgcc的visibility是说,如果编译的时候用了这个属性,那么动态库的符号都是hidden的,除非强制声明。1.创建一个c源文件,内容简单#include#include__attribute ((visibility("default"))) void not_hidd转载 2012-05-15 10:39:38 · 537 阅读 · 0 评论 -
DLL Hell
DLL Hell是因为DLL当初是作为函数级共享库设计的,并不能真正提供一个类所必需的信息(导类的时候出现问题)DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。转载 2012-02-08 16:46:11 · 537 阅读 · 0 评论 -
union用来节省空间,有些数据项不会同时出现
原创 2011-10-26 15:41:30 · 474 阅读 · 0 评论 -
类的继承方式
公有继承:"是一个"私有继承:"用...来实现",编译器不会将子类对象转化成父类对象原创 2011-10-09 10:17:06 · 514 阅读 · 0 评论 -
公有继承意味着 "是一个",私有继承意味着"用...来实现(避免切片)"
用父类来实现原创 2011-10-08 15:49:06 · 574 阅读 · 0 评论 -
重载和覆盖
重载:(1)相同的范围/在同一个类中(2)函数名字相同(3)参数不同(4)virtual 关键字可有可无。覆盖(1)不同的范围(分别位于派生类与基类);(2)函数名字相同(3)参数相同(4)基类函数必须有virtual 关键字原创 2011-10-09 09:33:07 · 386 阅读 · 0 评论 -
纯虚函数(继承接口),虚函数(继承接口和默认实现),非虚函数(继承接口和强制实现)
原创 2011-10-08 15:47:11 · 561 阅读 · 0 评论 -
三十分钟掌握STL(Using STL)
STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其他组件相区转载 2011-09-19 14:37:23 · 526 阅读 · 0 评论 -
C/C++基本类型字节
char 1short 2int 4 float 4long 4原创 2011-09-19 13:53:31 · 940 阅读 · 0 评论 -
volatile
volatile:(内存访问)直接访问原始内存 优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。转载 2011-06-28 17:17:00 · 461 阅读 · 0 评论 -
COM(组件对象模型)
<br />COM :创建和使用组件的标准<br />(DLL:COM的一种实现)<br />任何程序都由若干组件构成<br /> <br />组件:实现接口的功能模块<br /> <br />组件特点:(1)动态链接 (2)隐藏(内部)实现(实现语言,实现逻辑)<br /> <br />COM最终目的:动态替换组件<br /> <br />COM库(COM Library):支持组件管理<br /> <br />外部程序/组件 只通过接口访问组件<b原创 2011-01-13 16:23:00 · 1003 阅读 · 0 评论 -
ABI(Application Binary Interface)
ABI是系统与应用之间的协议. 一个BINARY(EXEC, LIB)必需符合ABI才能在相应的系统上运行.<br />比如我在PC上用不管什么样的COMPILER, 只要产生符合LINUX的ELF文件, 用相应的INSTRUCTION SET(比如INTEL, PPC, SPARC). 就可以在一个LINUX机器上运行. 调用系统或别人的LIB.<br />ABI定义了BINARY的文件格式, 内容, 以及装载/卸载程序的要求, 函数调用的参数传递规则, 寄存器, 堆栈的使用等. <br转载 2011-01-12 15:00:00 · 3634 阅读 · 0 评论 -
DLmalloc 内存分配算法
<br />dlmalloc由Doug Lea编写的内存分配算法<br /> <br />(1)mspace_malloc/mspace_free<br />(2) dlmalloc/dlfree<br /> <br />1.边界标记<br />2.空闲块分箱:2个分箱数组<br /> (1)小块空闲块大小(0-256):数组元素-空闲块链表<br /> (2)大块空闲块大小(>256):数组元素-空闲块树<br />3. 空闲段<br /> <br />内存分配过程:原创 2010-12-30 09:10:00 · 2623 阅读 · 1 评论 -
C++和Java中成员数据名和成员函数名的冲突问题
<br />C++:冲突<br />class TestClass{<br /> int aaa;<br /> void aaa(){};<br />};<br /><br />Java:不冲突<br />class TestClass{<br /> int aaa;<br /> void aaa(){};<br />};原创 2010-12-24 09:44:00 · 717 阅读 · 0 评论 -
动态链接库dll,静态链接库lib, 导入库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称"静态库"),另一种为动态连接库(DLL,以下简称"动态库")的导入库(Import Libary,以下简称"导入库")。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。 动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己转载 2010-10-31 18:44:00 · 669 阅读 · 0 评论 -
Debug原理
<br />调试器和被调试程序是通过中断系统来实现的.不过在Windows下,这些工作都不需要你来做了.Windows封装了一套完整的调试接口. <br />你只要建立一个调试器,用它打开(或建立)一个被调试进程,然后根据调试的目标中所包含的调试信息找出源代码与机器码之间的对映关系.在你要中断的地方加一个int3指令(并记录下原来的值),这个指令的代码是0xcc,当目标执行到int3时,它就产生了一个中断,这时目标程序停止运行,并将它的运行状态保存下来,再由操作系统接管.在Windows下,你的调试器就会接转载 2010-10-28 19:45:00 · 4442 阅读 · 0 评论 -
DLL查找顺序
来源:http://blog.youkuaiyun.com/clever101/ DLL的动态链接有两种方法。一种是加载时动态链接(Load_time dynamic linking)。Windows搜索要装入的DLL时,按以下顺序:应用程序所在目录→当前目录→Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。 前天看到这几句,突然设计出一道自认绝妙的笔试题:"如果采用加载时动态链接的方式,Windows搜索要装入的DLL采用怎样的顺序?"这个是基础题,估计你很容易答转载 2010-10-31 18:38:00 · 1544 阅读 · 0 评论 -
GDB调试程序-Ubuntu
导读: 用GDB调试程序出自Ubuntu中文目录[隐藏]1 GDB概述 2 一个调试示例 3 使用GDB 4 GDB的命令概貌 5 GDB中运行UNIX的shell程序 6 在GDB中运行程序 7 调试已运行的程序 8 暂停/恢复程序运行 8.1 设置断点(Break Points) 8.2 设置观察点(WatchPoint) 8.3 设置捕捉点(CatchPoint) 8.4 维护停止点 8.5 停止条件维护 8.6转载 2010-10-19 09:15:00 · 2413 阅读 · 1 评论 -
C/C++头文件大全
C、传统 C++#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include //数据流输入/输出#include //定义各种数据类型最值常量#include //定义本地化函数#include //定义数学函数#include //定义输入/输出函数#i转载 2010-09-03 20:32:00 · 592 阅读 · 0 评论 -
内存映射(mmap系统调用)
<br />映射虚拟内存-->物理内存/Swap/文件<br /> <br />文件映射到内存,内存访问取代IO访问 <br /> <br />可以映射同一个文件以(进程)共享内存 <br /> <br />Linux进程虚拟地址空间---(分成)-->虚拟内存区<br />虚拟内存区(VMA)表:进程所有的虚拟内存区<br />内存映射:创建一个虚拟内存区(VMA),映射文件 <br /> <br />映射文件:外部程序调用VMA的(操作函数集中)操作函数访问映射文件的VMA <br />原创 2010-09-15 08:56:00 · 3334 阅读 · 2 评论 -
C语言头文件、库文件的查找路径
<br />一、讨论环境<br />*操作系统:Redhat5/Fedora14<br />*编译器:gcc 4.5.1<br />以下言论仅确保在以上环境中,绝对正确。别的环境,大家可以通过类比方法,得到启示。<br /> <br /><br />二、C语言头文件的查找路径<br />C语言,使用include指令,包含头文件,但又细分两种形式:<br />1、形式一:#include “file1”<br /> gcc先在当前目录(指包含本条#include指令的源文件所在的目录)寻找file1,如果转载 2010-11-21 16:03:00 · 1499 阅读 · 0 评论 -
VirtualAlloc和VirtualCopy----VirtualFree
<br />VirtualAlloc 和VirtualCopy<br />VirtualAlloc 首先会从我们的虚拟地址空间中申请(或者说预留)一块虚拟空间,准备接下来要用它。注意此时,可用的物理内存并没有减少,只是虚拟地址少了一块可用的区域。 <br />真正把这块之前reserved的虚拟空间映射到物理的内存区域就是由VirtualCopy来干的,此时,MMU的页表就会增加一个entry,来表示物理--虚拟的映射关系。 <br /> <br />VirtualFree<br />VirtualF转载 2011-03-11 16:16:00 · 1169 阅读 · 0 评论