新微赢技术网
标题:
请教一个内存分配问题
[打印本页]
作者:
√死胖子
时间:
2009-11-3 04:15
标题:
请教一个内存分配问题
请看下边代码:
#include"iostream.h"
#include"iomanip.h"
void main()
{
int i=10;
int *j=&i;
if(!0)
{
int l=20;
int *k=&l;
cout<<&k<<setw(15)<<&l<<endl;
}
cout<<&i<<setw(15)<<&j<<setw(15)<<sizeof(j)<<endl;
}
输出结果为:0x0012FF70 //&k 0x0012FF74 //&l:
0x0012FF7C //&i 0x0012FF78 //&j
请问各位
1:内存的地址如何命名的?地址中的数字和字符各有什么含义?i的地址与其他三个有什么不同?
2:内存中的地址不是连续分布的么?i的赋值应在j前边且连续,l也应在k前边,可结果让我迷惑。。。不知是否与内存赋值方式有关?
3:指针变量在内存中占多少字节(我之前看到很多默认的4字节)?跟它存放的地址类型和大小有关么?
请高手赐教!!
作者:
酷aiq兒kuku
时间:
2009-11-3 04:15
2006-8-22 15:29:37
adaliuliu
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
第 3 楼 得分:0
不要意思,献丑,我的意思是变量在内存中的地址值的命名规则是什么?
作者:
逍遥
时间:
2009-11-3 04:15
2006-8-22 15:43:52
song4
等 级:贵宾
威 望:38
帖 子:1531
专家分:0
注 册:2006-3-25
第 5 楼 得分:0
分向上向下两种
作者:
怎么可能
时间:
2009-11-3 04:15
呵呵,0x0012FF70 是怎么来的?这下明白吧,,
版主说分向上向下两种,能具体解释一下么,从程序结果看我这里是不是向下的?
作者:
べ.べ凡士林
时间:
2009-11-3 04:15
以下是引用adaliuliu在2006-8-22 15:24:27的发言:
请看下边代码:
#include"iostream.h"
#include"iomanip.h"
void main()
{
int i=10;
int *j=&i;
if(!0)
{
int l=20;
int *k=&l;
cout<<&k<<setw(15)<<&l<<endl;
}
cout<<&i<<setw(15)<<&j<<setw(15)<<sizeof(j)<<endl;
}
输出结果为:0x0012FF70 //&k 0x0012FF74 //&l:
0x0012FF7C //&i 0x0012FF78 //&j
请问各位
1:内存的地址如何命名的?地址中的数字和字符各有什么含义?i的地址与其他三个有什么不同?
2:内存中的地址不是连续分布的么?i的赋值应在j前边且连续,l也应在k前边,可结果让我迷惑。。。不知是否与内存赋值方式有关?
3:指针变量在内存中占多少字节(我之前看到很多默认的4字节)?跟它存放的地址类型和大小有关么?
请高手赐教!!
细讲一下
1.分向上和向下两种
在栈里的变量空间都是向上扩张,也就是说,根据你定义变量的顺序,依次向上分配空间
而堆的是向下分配空间
那些字符是16进制的表示 I的地址与其他的一样,都在栈内
2.一般情况是连续分配的,因为系统也没有多余的指针来完成地址标记.
特殊情况是,当你定义的变量不是一个"整数",或者过大与这一字符条的时候,毕竟用户不能保证定义4个字节或其倍数的东西
例如
struct tmp
{
int xx;
char x;
};
sizeof(tmp)!=5 it==8
所以与复职无关,原因在1
3.简单说4不是很负责
只能说是sizeof(int)
指针只是储存一下地址,跟储存什么类型无关,指针的类型,只是告诉你他所指的内容和每次移动的字节,方便运算.
作者:
梧桐雨love
时间:
2009-11-3 04:15
我明白了,多谢版主的精彩解答!
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2