Memory 堆栈和内存上的地址范围是多少?

Memory 堆栈和内存上的地址范围是多少?,memory,heap-memory,stack-memory,Memory,Heap Memory,Stack Memory,在计算机内存上,比如说IA32,堆栈的范围一般是多少?我知道像0xffff1234这样的地址可能在堆栈上。例如,堆栈是否可能增长到0x0800abcd?那堆呢?我知道堆地址总是低于堆栈地址,但它的范围通常是多少?还有,堆下面的面积是多少 堆栈-程序用于实际运行程序的内存。它包含局部变量、回调数据(例如,当您调用一个函数时,堆栈存储您在进入新函数之前在代码中的状态和位置),以及其他一些类似的小东西。您通常不直接控制堆栈,变量和数据被销毁,在您移入和移出函数作用域时创建 堆-程序的“动态”内存。每次

在计算机内存上,比如说IA32,堆栈的范围一般是多少?我知道像0xffff1234这样的地址可能在堆栈上。例如,堆栈是否可能增长到0x0800abcd?那堆呢?我知道堆地址总是低于堆栈地址,但它的范围通常是多少?还有,堆下面的面积是多少

堆栈-程序用于实际运行程序的内存。它包含局部变量、回调数据(例如,当您调用一个函数时,堆栈存储您在进入新函数之前在代码中的状态和位置),以及其他一些类似的小东西。您通常不直接控制堆栈,变量和数据被销毁,在您移入和移出函数作用域时创建

堆-程序的“动态”内存。每次动态创建新对象或变量时,它都存储在堆上。这个内存由程序员直接控制,您应该负责创建和删除那里的对象

非常感谢

堆栈: 您可以在链接时间内定义堆栈的大小。 据我所知,windows应用程序默认堆栈大小为2MB。 您可以在项目设置中更改堆栈的大小。但当应用程序构建时,堆栈大小是固定的。 操作系统会为堆栈溢出设置保护页。如果任何操作试图访问保护页,将触发异常

堆: 我猜默认堆大小也可以在项目设置中更改。 因为在您的应用程序中,您可以创建自己的堆,或者使用CRT堆、Win32堆。所以应该有很多堆。 当您尝试分配内存时,堆管理器会根据算法来分配内存。若内存不足,堆管理器将从虚拟内存管理器申请内存。在用户地址空间内存不足之前,抛出异常:内存不足。 有几种定义:HeapNode、HeapSegment、LFH、LEA、BEA。 您可以使用Windbg:!堆-s!heap-a,这些命令用于检查Windows堆的结构