随笔分类 -  C++

上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页
摘要:线程有自己的寄存器,运行时堆栈或许还会有私有内存。 gdb提供了以下供调试多线程的进程的功能: * 自动通告新线程。 * \ "thread THREADNO\ ",一个用来在线程之间切换的命令。 * \ "info threads\ ",一个用来查询现存线程的命令。 * \ "thread apply [THREADNO] [ALL] ARGS\ ",一个用来向线程提供命令的命令。 * 线程有关的断点设置。 注意:这些特性不是在所有gdb版本都能使用,归根结底要看操作系统是否支持。 如果你的gdb不支持这些命令,会显示出错信息: ( 阅读全文
posted @ 2011-07-09 08:08 dzqabc 阅读(9699) 评论(0) 推荐(0) 编辑
摘要:作者:破砂锅 开源的GDB被广泛使用在Linux、OSX、Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜。 多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序 freeze,直到你continue这个线程,程序中的其他线程才会继续运行。这个限制使得被调试的程序不能够像真实环境中那样... 阅读全文
posted @ 2011-07-09 08:05 dzqabc 阅读(8212) 评论(0) 推荐(0) 编辑
摘要:函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。方法 函数指针的声明方法为: 数据类型标志符 (指针变量名) (形参列表); 注1:“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形... 阅读全文
posted @ 2011-06-30 08:04 dzqabc 阅读(561) 评论(0) 推荐(0) 编辑
摘要:Thunk 技术的一个改进 作者:南风 下载源代码 摘要:介绍了 thunk 技术中如何避免直接写机器码。 关键字:Thunk 机器码 this指针 Thunk技术,一般认为是在程序中直接构造出可执行代码的技术(在正常情况下,这是编译器的任务)。《深度探索C++对象模型》中对这个词的来源有过考证(在中文版的162页),说thunk是knuth的倒拼字。knuth就是大名鼎鼎的计算机经典名著《Th... 阅读全文
posted @ 2011-06-29 00:37 dzqabc 阅读(499) 评论(0) 推荐(0) 编辑
摘要:2009年7月30日 kunlun 发表评论 阅读评论 链接: C++虚函数探索笔记(1)——虚函数的简单示例分析 C++虚函数探索笔记(2)——虚函数与多继承 C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承... 阅读全文
posted @ 2011-06-28 00:31 dzqabc 阅读(2385) 评论(0) 推荐(0) 编辑
摘要:C++虚函数探索笔记(1)——虚函数的简单示例分析 C++虚函数探索笔记(2)——虚函数与多继承 C++虚函数探索笔记(3)——延伸思考:虚函数应用的一些其他情形 关注问题: 虚函数的作用 虚函数的实现原理 虚函数表在对象布局里的位置 虚函数的类的sizeof 纯虚函数的作用 多级继承时的虚函数表内容 虚函数如何执行父类代码 多继承时的虚函数表定位,以及对象布局 虚析构函数的作用 虚函数在QT的... 阅读全文
posted @ 2011-06-22 00:28 dzqabc 阅读(417) 评论(0) 推荐(0) 编辑
摘要:inline int static_test(){ static int i =0; ...}inline 代表编译时代码拷贝,也就有多份副本了,但在VC中测试,i只有一份副本,那么编译器是如何实现的:1.代码拷贝不一定是c代码的拷贝吧,可以是编译后的汇编代码的拷贝。而函数在代码段,变量则在数据段。拷贝的只是函数部分。静态变量在函数部分保存的仅仅是该变量的地址。2.static变量不是放在栈里的,是放在静态数据区.和全局变量存放在一起.不能将它和局部变量混为一谈。 阅读全文
posted @ 2011-06-22 00:09 dzqabc 阅读(1520) 评论(0) 推荐(0) 编辑
摘要:1. 指针的来源 在当代,大多数的现代计算机都会把内存分割成字节,每个字节都有着其唯一的地址。可执行程序由代码和数据两部分构成,而程序中的每个变量都占有着一个或多个字节,也就是说,每个变量都有着自己的地址。而这个就是指针的来源。 其实每个地址就是一个数,但是我们却不能用数来表示地址,存储地址,我们需要用指针变量。例如int *p = i,我们就可以说p是指针变量,存储着变量i的地址。 那么我们说... 阅读全文
posted @ 2011-06-17 00:47 dzqabc 阅读(219) 评论(0) 推荐(0) 编辑
摘要:1. 数组作为函数参数 函数是我们学习程序设计语言最基本的东西了,我在此不再赘述。只讨论一种特殊情况,就是数组作为函数的参数传递。 我们都知道,其实在传递数组的时候,实际上是传递了数组首元素的指针。明确了这一点之后,我们就可以思考下面的问题。 既然他只是传递了数组首元素的指针,那么他必然无法知道整个 阅读全文
posted @ 2011-06-17 00:44 dzqabc 阅读(368) 评论(0) 推荐(0) 编辑
摘要:1. 数组大小 我相信,在C#/Java中,更多的人愿意用List<T>来取代数组,一方面是List提供了较多的方法,另一方面也无需我们去指定数组的大小。 那么在C语言中,我们既然需要必须指定数组的大小,而一般来讲,很多数组大小事我们无法确定并且经常会发生变化的,那么我们最好的方式就是用宏定义来限定数组的大小。#define SIZE 10int main (void){ int a[SIZE]... 阅读全文
posted @ 2011-06-17 00:39 dzqabc 阅读(285) 评论(0) 推荐(0) 编辑
摘要:1. typedef 在前文中,我们用宏定义来定义了一个BOOL类型,那么现在就用更专业的方式来定义类型。typedef int Bool;int main (void){ Bool flag=1; if(flag) { printf("True"); } else { printf("false"); }}typedef 的作用就是类型定义(Type Definition)。类型定义有以下三个... 阅读全文
posted @ 2011-06-17 00:38 dzqabc 阅读(204) 评论(0) 推荐(0) 编辑
摘要:1. 编译和链接 将程序转化为机器可执行的代码,C语言分为三个步骤: A. 预编译。程序首先会交给预处理器,预处理器执行以#开头的指令,然后给程序添加指令,或者修改指令。 B. 编译。修改后的程序进入编译器,编译器会把程序翻译成机器指令(也就是目标代码),但是这样的程序还是不能执行的。 C. 链接。链接器把由编译器产生的目标代码和其他所需的代码整合到一起,这些附加代码包括程序中用到的库函数。这样... 阅读全文
posted @ 2011-06-17 00:24 dzqabc 阅读(260) 评论(0) 推荐(0) 编辑
摘要:#include"iostream"#include"string"using namespace std;int main(){ string str; while(getline(cin,str)) { string::size_type k; while((k=str.find("you"))!=string::npos){ str.replace(k,3,"we"); } cout<<st... 阅读全文
posted @ 2011-06-13 07:38 dzqabc 阅读(258) 评论(0) 推荐(0) 编辑
摘要:1.定义函数模板 2.使用模板函数 输出结果 3.确定返回的参数 若两个参数不正确,或者不支持模板定义的特性,编译时则会出错 4.多个模板参数 示例 返回值是T1,所以返回是int类型,结果是42,出错了 定义3个参数,第3个参数用于表示返回值类型 测试 返回正确的42.1 5.模板函数重载 重载函 阅读全文
posted @ 2011-06-13 01:05 dzqabc 阅读(2049) 评论(0) 推荐(0) 编辑
摘要:value="指针与迭代器&*iter的用法 指向数组内元素的指针永远都是迭代器, 迭代器并非总是指针.所有符合标准的迭代器都要求提供operator*(),而且该操作符必须返回一个真正的T&。&*iter将迭代器转型为指针&*iter, 先将迭代器解引用,获得容器内对象的直接引用,然后获取它的地址。 阅读全文
posted @ 2011-05-28 00:26 dzqabc 阅读(6642) 评论(0) 推荐(1) 编辑
摘要:c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义(比如在.H文件里声明某个成员函数,在.CPP文件里定义该成员函数),这样会导致连接错误。所应该将模板类/模板函数的定义与声明写在一个.h文件里。可以理解为:模板函数并非函数定义,不能放在CPP文件中。模板函数的函数定义是用编译器编译时生成的。 阅读全文
posted @ 2011-04-15 00:51 dzqabc 阅读(997) 评论(0) 推荐(0) 编辑
摘要:templateinline static void Dumpvector(const std::vector &vvector){ std::vector ::iterator pvectorIt = vvector.begin(); for(; pvectorIt != vvector.end(... 阅读全文
posted @ 2011-04-15 00:48 dzqabc 阅读(669) 评论(0) 推荐(0) 编辑
摘要:printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。⑤l或h:l对整型指... 阅读全文
posted @ 2011-04-15 00:40 dzqabc 阅读(691) 评论(0) 推荐(0) 编辑
摘要:有序类型 有序类型是建立在概念“顺序”或“序列”基础上的数据类型。你不仅可比较两个有序值的大小,而且可以求取给定有序值的前驱及后继,或者计算它们的最大或最小值。三种最重要的预定义有序类型是整数类型、布尔类型和字符类型(Integer,Boolean,Char)。各种类型根据其内部表示和取值范围不同又可进一步细分。表 3.1: 表示数字的有序数据类型 大小有符号值域无符号值域8 bitsShortInt -128 to 127Byte 0 to 25516 bitsSmallInt -32768 to 32767Word 0 to 65,53532 bitsLongInt -2,147,483, 阅读全文
posted @ 2011-04-01 00:30 dzqabc 阅读(698) 评论(0) 推荐(0) 编辑
摘要:“标准容器中存放引用”与“指向引用的指针(pointer to reference)” 大家都知道,标准容器中是“按值”存放并操纵存放于其中的实例的,不允许在标准容器中存放“引用” 。 vector<int&> a; 编译过后,会出现一大堆的错误,但是我们可以很容易找到“pointer to reference is illegal”之类 的字眼儿,即“指向引用的指针”是非法的:因为容器中很可能有... 阅读全文
posted @ 2011-04-01 00:14 dzqabc 阅读(937) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页