标签:内存模型
对于计算机内存模型,我认为可按 数组 模型进行类比。将计算机的内存结构等同于 数组 存储结构(其实这里反过来才是正确的,数组存储的模型是依照计算机的内存模型进行存储的,但这里为了更容易理解,就将其反过来思考)。
一般而言,对于不同的机器,其内存高低字节存储位置可能不同,这就是所谓的大端小端。这也给我们的理解带来困惑。
而在我的机器上,我测试出来的结果是:以竖直内存模型分析,低地址在上,高地址在下方。
验证程序:
#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