码迷,mamicode.com
首页 > 其他好文 > 详细

计算机内存模型 粗浅理解

时间:2015-05-21 06:42:56      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:内存模型


    对于计算机内存模型,我认为可按 数组 模型进行类比。将计算机的内存结构等同于 数组 存储结构(其实这里反过来才是正确的,数组存储的模型是依照计算机的内存模型进行存储的,但这里为了更容易理解,就将其反过来思考)。

    一般而言,对于不同的机器,其内存高低字节存储位置可能不同,这就是所谓的大端小端。这也给我们的理解带来困惑。

    而在我的机器上,我测试出来的结果是:以竖直内存模型分析,低地址在上,高地址在下方。

验证程序:

#include "stdafx.h"
#include <iostream>

using std::cout;
using std::endl;


int _tmain(int argc, _TCHAR* argv[])
{
	int a = 1;
	int  b = 2;
	int c = 3;
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	
	system("pause");
	return 0;
}

测试结果:

技术分享

分析:

从测试结果可以看出,&a > &b >&c,因为这里是在 栈 上创建变量的,栈的特点是先进后出,所以当a创建时,它进入栈内;当b创建时,a就会被往下压,然后b在进入栈内;同理,当c被创建时,a和b同时进行压栈动作后,c才入栈。此时的内存模型就如:c-->b-->a;而a的地址最大,c的最小,换成竖直方向来看,可知,越往下地址值越大。


    为什么我说计算机内存模型可等同于 数组 存储模型呢,请看以下程序:

#include "stdafx.h"
#include <iostream>

using std::cout;
using std::endl;


int _tmain(int argc, _TCHAR* argv[])
{
	char arr[3] = { 1, 2, 3 };
	cout << std::hex;
	cout << "&arr[0] = " << (int)&arr[0] << endl;
	cout << "&arr[1] = " << (int)&arr[1] << endl;
	cout << "&arr[2] = " << (int)&arr[2] << endl;

	system("pause");
	return 0;
}

测试结果:

技术分享

分析:

从测试结果中可知,数组的排列方式跟我们上面分析的内存模型排列方式一样,也是低地址在上面,高地址在下面(简单记:高对高,低对低--数组低位对应内存低位,数组高位对应内存高位)。

本文出自 “whatever957” 博客,请务必保留此出处http://whatever957.blog.51cto.com/6835003/1653381

计算机内存模型 粗浅理解

标签:内存模型

原文地址:http://whatever957.blog.51cto.com/6835003/1653381

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!