栈和堆的地址哪个高

我们都知道,堆是向到高地址扩展的,栈是向低地址扩展的,那么堆和栈的地址那个高呢?

int _tmain(int argc, _TCHAR* argv[])
{
    int stack_val = 0;
    int* heap_ptr = new int(2);
    printf("stack address = %08x\n", &stack_val);
    printf("heap address = %08x\n", heap_ptr);
    getchar();
    return 0;
}

以上为Windows上的程序,结果栈低于地址,说明windows上内存是中间向两头增长的。

同样的程序在linux上,结果栈高于地址,说明linux上的内存是两头向中间增长的。

时间: 2024-10-08 15:47:27

栈和堆的地址哪个高的相关文章

栈与堆的区别

堆 和 栈的 区别(经典) 转载一篇理解堆和栈区别的好文章 此文章虽然是面向C/C++程序员写得,但是对咱们Java程序员还是很有帮助的. 堆和栈的区别 一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其 操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 .注意它与数据结构中的堆是两回事,分配方式倒是类

关于内存中栈和堆的区别(非数据结构中的堆和栈,区别)

本文转载自:http://blog.csdn.net/fenghuayoushi/article/details/6074666 ----------------------------------------------------------------------------------------------------------------------- 下面内容转自:http://www.cnblogs.com/gesenkof99/archive/2009/04/14/14356

剖析程序中的栈与堆的内存分配

在计算机系统中,运行的应用程序的数据都保存在内存中,不同类型的数据所保存在的区域不同,应用程序中总共有五个内存区域: (1).栈区[stack]:由编译器自动分配并释放,一般存放函数的参数值,局部变量等 (2).堆区[heap]:由程序员分配和释放内存,如果程序员不释放,程序结束时,可能会由操作系统回收 (3).全局区[静态区][static]:全局变量和静态变量的存储是放在一起的,而该区又分为两种情况,一种是已初始化的,另一种是未初始化的,初始化的全局变量和静态变量存放在一块区域,未初始化的全

java栈和堆区别

1, 垃圾回收机制仅仅作用于堆内存,与栈内存无关; 2, 栈:stack 栈的存取速度比堆快,效率高 保存局部变量和对象的引用值 3, 堆:保存较大的变量 4, 编译器处理int a = 3 时,首先会在栈中创建一个变量为a的引用,然后查找栈中是否存在3这个值,如果不存在,就将3存放进来: 处理b = 3时,也是这样,因为之前将3存放进来了,所以此时编译器只需将创建b这个变量再指向3就行了(有利于节省空间). 这个时候就出现a和b同时指向3的情况,但不影响他们的使用.如果此时又定义a = 4;,

【转】数据结构中栈和堆---内存分配中栈和堆

一.数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈.堆和栈都是一种数据项按序排列的数据结构. 1)栈就像装数据的桶或箱子  我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体). 2)堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们

.NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱

一.“堆”,“栈”专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道...“堆”,“栈”是什么?哦,这个知道... 之前我也写过一篇堆栈的文章,不过写的不深刻,剖析的也不全面,所以今天也参考了一些大牛的资料. 一.预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其    操作方式类似于数据结构中的栈.栈是一个内存数组,是一个LIFO(last-in  f

栈与堆

转载自http://www.cnblogs.com/kevinGaoblog/archive/2012/03/23/2413102.html 一个由C/C++编译的程序占用的内存分为以下几个部分: 栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 全局区(static):也叫静态

计算机编程基础:栈、堆、堆栈概念区分及理论知识

一.预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结  构中的栈.  2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构  中的堆是两回事,分配方式倒是类似于链表,呵呵.  3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在  一块区域, 未

数组、栈、堆(java基础知识五)

1.数组概述.定义格式 * A:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. * B:数组定义格式 格式1:数据类型[] 数组名;----int[] arr; 格式2:数据类型 数组名[];----int arr[]; * C:数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致, 2.数组初始化.动态初始化 * A:什么是数组的初始化 Java中的数组必须先初始化,然后才能使用. 所谓初始化:就是