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 *
----------------------------------------------------------
相关文档:
通信
Server:
#pragma comment(lib, "ws2_32.lib")
#include <Winsock2.h>
#include <stdio.h>
void main()
{
//版本协商
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1); //0x0101
err = WSAStartup ......
C/C++位操作
一、传统的C方式位操作:
1.基本操作:
使用一个unsigned int变量来作为位容器。
2.操作符:
| 按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
& 按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时 ......
在c++ prime书中看到过,在DLL和lib中看到过,但是每次看过就不求甚解地一扫而过。心里知道有extern c这个语句,却不知道该用在哪里,又能起到什么作用。唉,想想自己也算是写过不少CODE的人了,可这种眼高手低的毛病却从没改变过。今天突然想起extern这个关键字,遂决定不能再这么浪 ......
使用Objective-C解析HTML或者XML,系统自带有两种方式一个是通过libxml,一个是通过NSXMLParser。不过这两种方式都需要自己写很多编码来处理抓取下来的内容,而且不是很直观。
有一个比较好的类库hpple,它是一个轻量级的包装框架,可以很好的解决这个问题。它是用XPath来定位和解析HTML或者XML。
安装步骤:
-加入 libx ......
用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或
函数a,我只要直接在源文件中包含#include<xxx.h>
(xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个问题一直也是似是而非的困扰着我许多年了,今天上网狠狠查了一下总算小有
所获了:
头 ......