因爲整張試卷都是代碼題,因此將題理解爲程序員編程對內存管理的一些瞭解
回來找到一些技術博客,覺得寫得很好,轉發了。
http://blog.sina.com.cn/s/blog_a0e859400101279a.htm
棧增長和大端/小端問題是和CPU相關的兩個問題。
在內存管理中,與棧對應是堆。對於堆來講,生長方向是向上的,也就是向着內存地址增加的方向;對於棧來講,它的生長方式是向下的,是向着內存地址減小的方向增長。在內存中,“堆”和“棧”共用全部的自由空間,只不過各自的起始地址和增長方向不同,它們之間並沒有一個固定的界限,如果在運行時,“堆”和 “棧”增長到發生了相互覆蓋時,稱爲“棧堆衝突”,系統肯定垮臺。
在常見的x86中內存中棧的增長方向就是從高地址向低地址增長。
我們可以通過一些代碼來判斷棧的增長方向:
在內存管理中,與棧對應是堆。對於堆來講,生長方向是向上的,也就是向着內存地址增加的方向;對於棧來講,它的生長方式是向下的,是向着內存地址減小的方向增長。在內存中,“堆”和“棧”共用全部的自由空間,只不過各自的起始地址和增長方向不同,它們之間並沒有一個固定的界限,如果在運行時,“堆”和 “棧”增長到發生了相互覆蓋時,稱爲“棧堆衝突”,系統肯定垮臺。
在常見的x86中內存中棧的增長方向就是從高地址向低地址增長。
我們可以通過一些代碼來判斷棧的增長方向:
#include<stdio.h>
static int stack_dir;
static void find_stack_direction (void) {
static char *addr = NULL;
char dummy;
if (addr == NULL)
{
addr = &dummy;
find_stack_direction ();
}
else
if (&dummy > addr)
stack_dir = 1;
else
stack_dir = -1;
}
int main(void)
{
find_stack_direction();
if(stack_dir==1)
static int stack_dir;
static void find_stack_direction (void) {
static char *addr = NULL;
char dummy;
if (addr == NULL)
{
addr = &dummy;
find_stack_direction ();
}
else
if (&dummy > addr)
stack_dir = 1;
else
stack_dir = -1;
}
int main(void)
{
find_stack_direction();
if(stack_dir==1)