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