易截截图软件、单文件、免安装、纯绿色、仅160KB

c/C++编译的程序占用的内存情况 文字常量区

首先看下下面这段:
int main()
{
char *name = "fengkewei";
char name1[] = "fengkewei";
char *name2 = "fengkewei";
char *name3 = "woaifengkewei";
int i = 10;
int j = 10;
int k = 11;
return 0;
}
若您觉得它们应该都保存在内存中的一块地方,那请往下看。。。。
下面是编译器为各个变量分配的内存地址,由于分配在栈上 所以地址是递减的
---------------------栈区------------------------------------
+   &name 0x0013ff5c unsigned char * *
+   &name1 0x0013ff48 unsigned char [10]*
+   &name2 0x0013ff3c unsigned char * *
+   &name3 0x0013ff30 unsigned char * *
+   &i 0x0013ff24 int *
+   &j 0x0013ff18 int *
+   &k 0x0013ff0c int *
---------------------------------------------------------------
&name 和&name1[] 相差20个字节 但"fengkewei"只有10个字节(带空字符)
&name1[]和&name2 相差12个字节
后面都正常了 都差12
为什么是12?
————————————————————————————————————————————
下面是各字符串的首地址 它们都在文字常量区里 相同也就相同了 不同则是递增分配的( 文字常量区也是递增分配的)
---------------------------文字常量区-------------------------------------------------
+   name 0x004156b8 "fengkewei" unsigned char *
+   name2 0x004156b8 "fengkewei" unsigned char *
+   name3 0x00416010 "woaifengkewei" unsigned char *
+   name1 0x0013ff48 "fengkewei" unsigned char [10]
可见name1[]是在一个不同的地方的 也就是说它就是在栈上
 
 
现在我们设置一个整型指针
int *p;
p = &i;
那p的地址应该是指向i的地址,指向栈区
果然:
+   &i 0x0013ff24 int *
+   p 0x0013ff24 int *
----------------------------------------------------------


相关文档:

C/C++位操作

C/C++位操作
一、传统的C方式位操作:
1.基本操作:
  使用一个unsigned int变量来作为位容器。
2.操作符:
|  按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
&  按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时 ......

PRO*C编程中出现的错误

安装完Oracle后,使用PRO*C编译.pc文件,出现以下错误
proc: error while loading shared libraries: libclntsh.so.11.1:
cannot open shared object file: No such file or directory
解决方法:
在/etc/profile中添加
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;
export LD_LIBRARY_PATH
然后可以 ......

递归 回溯法求解8皇后问题(C)

无意中翻出了N年前写的递归-回溯法求解8皇后问题,干粹塞到博客中吧。
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define QUEENS 8
// 记录解的序号的全局变量。
int iCount = 0;
// 记录皇后在各列上的放置位置的全局数组。
int Site[QUEENS];
// 递归求解的函数。
void Q ......

"extern C", 你真的懂了吗?

       在c++ prime书中看到过,在DLL和lib中看到过,但是每次看过就不求甚解地一扫而过。心里知道有extern c这个语句,却不知道该用在哪里,又能起到什么作用。唉,想想自己也算是写过不少CODE的人了,可这种眼高手低的毛病却从没改变过。今天突然想起extern这个关键字,遂决定不能再这么浪 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号