自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (1)
  • 收藏
  • 关注

转载 stdcall、cdecl调用约定方式详解

在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递

2011-06-17 11:08:00 1069

转载 c/c++编译器的内存分配模式

另外还有一篇讲解比较详细的是:http://www.cnblogs.com/lzjsky/archive/2010/11/24/1886720.htm本文转自:http://my.oschina.net/solu/blog/2537C/C++程序内存分配详解   

2011-06-16 13:20:00 5600

原创 如何判断系统栈的增长方向(stack growth direction)

对于一个用惯了i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。C是一个不错的选择。那接下来的问题就是如何用C在哪里会用到栈呢?稍微了解一点等一下,怎么比较两个变量的地址呢?“先声明的先入栈那就函数加个参数,比较参数和局部变量的位置,参数肯定先入栈。那为什么不能局部变量先入栈?第一反应是怎么可能,但仔细想来又没有什么不可以。所以,这种方法也依赖于编译器的实现。不妨回

2011-06-16 12:02:00 2940

转载 关于栈帧

每个函数调用的时候都有自己独立的一块栈帧,这个栈帧中维持着各种各样的信息。寄存器esp指向当前栈帧的顶部,也就是低地址。所以我们需要想象的是一个很长的木头,木头被编了号码,esp则指向了号码较低的区域。        所以可以想象每个函数都有它自己的那一块木头,这时候问题来了,如果一个函数中有调用别的函数时怎么办,这需要从一个木头跳到另外一块木头,比如main函数的栈帧也即是它的木头处。让

2011-06-16 11:00:00 782

转载 OPENMP小记

转自:http://ybmmwjl.blog.163.com/blog/static/6563878120102612019166/  配置及简介1.1 在VC++2008(VC9.0)中,如果没有任何设置,在代码中使用编译指导语句将不会报错,但是也不起作用。 1.2 OpenMP发展与优势(部分摘自:http://blog.chinaunix.net/u2/86537/sho

2011-06-15 10:51:00 3164

原创 动态创建高维数组

数组可以进行静态创建和动态创建,平时最常用的还是动态创建:动态创建一维数组,测试代码如下:int *array1; int n; cin >> n; array1 = new int[n]; for (int i = 0; i  {  array1[i] = i; } for (int j = 0; j  {  cout  }动态创建二维数组,测试代码如下:int **array2

2011-06-11 12:18:00 1603

原创 &(取引用 reference)和*(解引用 dereference)在二维数组时候的使用

取引用&的时候,把它后面的标识符视为一个变量,尤其是对于一个数组的时候(无论是几维的),&后加上数组的标识符就是表示取这个数组的首地址,注意:对于一维数组&A就是取数组首地址,对于二维数组&A[0]还是取数组第一行的首地址;对于三维数组&A[0]就是取第一个二维数组的首地址,&A[0][0]就是取第一个第三维数组的首地址,因为对于二维和三维数组而言,A[0]和A[0][0]都还是另外一个数组的首地

2011-06-10 21:56:00 2343

转载 typedef用法和其与define的区别

其实说白了typedef就是类型定义,把“一种数据类型定义为某一标识符,在程序中使用该标识符来实现相应数据类型变量的定义”,只是被定义的数据类型有简单的,也有复杂的而已,复杂的要具体去分析到底定义的是什么样的数据类型。typedef有一般有以下四种用途:用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这

2011-06-10 20:54:00 652

原创 运算符的优先级和结合性

在C++中有许多运算符,其中运算符又有优先级和结合性,可以通过以下步骤利用优先级和结合性把一个表达式一层层划分好用于运算:1.首先从表达式从左到右看都有哪些运算符,从优先级最高的运算符开始以运算符为界把表达式换分为两个子式,每个子式可以用括弧分开以明确各个部分2.然后遇到相同优先级的运算符时候就要考虑其结合性了,看是先运算左边还是右边。C++Primer上说:其实在一般情况下,相同优先级的

2011-06-10 17:58:00 1343

原创 指针类型的确定

在定义指针的时候可能遇到层层嵌套的定义,有时候一眼看上去无法判断,可以根据以下步骤从内层一层一层进行判断:1.首先找到定义的标识符(即变量名);2.根据标识符左右两边的运算符的优先级和结合性进行一层一层的划分,用括弧标出来。*结合的第一个标识符决定了定义的指针总体类型。如int (*(p[n]))就是一个数组 int (*(p()))就是一个函数;3.然后从第一层开始用手去掉最内层的*

2011-06-10 16:35:00 1067

原创 二维(及高维)数组指针意义和使用

以前以为数组很简单,现在发现原来是自己很肤浅,昨天写了一段代码总是越界一晚上也没搞清楚是怎么回事,现在才发现是在对二维数组的指针引用上出错了,下面是目前发现几种形式:1. 首先静态二维数组如何作为参数传入函数形式:void myfunc(char sToken[][100])或 void myfunc(char (*sToken)[100])是等价的!2.静态二维数组元素a[i][j]

2011-06-10 14:15:00 2559 1

转载 vs中无法加入断点进行调试的解决方案

【 1】以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟。昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位, 但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为该文档加载任何符号。 ”再右键->“位置”->“答应源代码与原始版本不同”,还是不行。77777我还不信了,整它!  后来才发现,“Alt+F7”->“配置属性”->“调试”->“命令”中输入的 e

2011-06-09 21:23:00 18944

原创 二维矩阵相乘的串行和并行实现

通常的二维矩阵相乘的串行算法实现很常见,如下:  int m;//column of the Matrix  int A[][]; int B[][]; //two matrix used to do the multiplication  int C[][]; //used to strore the final result  int D[][][];//used to store the

2011-06-09 10:05:00 2111

原创 斐波那契数列的非递归实现

斐波那契数列就是每次最后两个数值相加构成下一个数值,递归定义如下:fibonacci 数列定义:n = 1,2 时,fib(n) = 1n > 2 时,fib(n) = fib(n-2) + fib(n-1)其非递归实现如下:int fabnacci(int n){int a = 1;int b = 1;int c = 1;if (n < 3){return 1;} for (

2011-06-08 20:53:00 1680

原创 Visual Studio与ActiveX控件兼容问题解决

微软在线提供的解决方案网址:http://support.microsoft.com/kb/318597微软的配套服务还是很强大的!

2011-06-07 17:16:00 1070

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除