堆跟栈一个是从内存头向后检索,一个是从后向前检索的,假设内存中是空的,int a;int b;a存储的位置就在内存最尾,b倒数第二,还有一点需要注意,申请内存的时候,不管申请多少,计算机分配给你的都是1024个字节的整数倍,也就是说 哪怕你只申请了一个字节的空间,但是电脑给你的其实是1024个字节,只不过能够给你自由访问的是你申请的那一个字节罢了。
你是在VC的Debug状态下运行的。
VC在Debug状态下,会给每个栈变量的前后都插入4个字节的保护值:0xcccc。这样,一个int型本身4字节,加上前后各4字节的保护值,一共占有12个字节。
保护值的目的是让VC系统在Debug状态下,分析你的赋值语句是否越界。
如果你在VC的Release下运行,则差为4。
按说内存的分配并不是传统意义上的相邻,最典型的例子莫过于你创建的一个个的变量,他们并不是根据创建的时间顺序排列的。。数组和一些较为典型的vector/deque容器则是顺序排名的,主要是提供了快速的随机访问,缺点是比较不容易进行增加和删减。
申请一段连续的内存来存储数据是个不错的选择,不过数据的类型应该更广泛些,对于那些需要大量插入和删除的数据来讲,顺序放在 一个空间内不是个很好的选择。
中间还有标识符的位置,你可以定义 int xxx[3]看看xxx[0] xxx[1] xxx[2]他们之间就是相差4了
这个跟编译器或者编译选项有关,你的估计是debug版本的会在变量中间插入一下额外的调试用的数据