| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 613 人关注过本帖
标题:请教一个内存分配问题
只看楼主 加入收藏
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
 问题点数:0 回复次数:7 
请教一个内存分配问题

请看下边代码:
#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字节)?跟它存放的地址类型和大小有关么?


请高手赐教!!

搜索更多相关主题的帖子: 内存 分配问题 
2006-08-22 15:24
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-22 15:29
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
得分:0 

不要意思,献丑,我的意思是变量在内存中的地址值的命名规则是什么?

2006-08-22 15:40
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-22 15:43
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
分向上向下两种

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-08-22 15:45
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
得分:0 
呵呵,0x0012FF70 是怎么来的?这下明白吧,,

版主说分向上向下两种,能具体解释一下么,从程序结果看我这里是不是向下的?
2006-08-22 16:03
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用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)
指针只是储存一下地址,跟储存什么类型无关,指针的类型,只是告诉你他所指的内容和每次移动的字节,方便运算.


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-08-22 16:11
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
得分:0 
我明白了,多谢版主的精彩解答!
2006-08-22 16:33
快速回复:请教一个内存分配问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016874 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved