读书人

堆栈和分页以及溢出有点糊涂了解决方

发布时间: 2012-03-24 14:00:46 作者: rapoo

堆栈和分页,以及溢出有点糊涂了
看到分页的时候,了解到win是4k一页。如果超过一个页,那么会出现越界问题。

然后就有如下测试代码

C/C++ code
        printf("\n-------- process stack size start --------\n\n");    char stack_size[1024*4*1024];      //->即将越界    stack_size[0] = 0;    //_PAGESIZE_   // #define _PAGESIZE_    0x1000;    printf("\n-------- process stack size end --------\n\n");


如果stack_size再大一点vc插入的页面检查代码就会抛出异常。

但是我现在在内核编程的时候,他讲到堆栈(18章)我就傻掉了。

1,这本书,第18章被翻译成堆栈。我没搞懂。他是讲程序堆,还是程序栈?
2,他说堆栈有1m的大小。这个指的又是啥??????????????

[解决办法]
堆栈==栈
[解决办法]
这个是典型的历史遗留翻译问题 一般来说“堆栈”就是指“栈”stack
[解决办法]
分页是操作系统把虚拟内存映射到物理内存的使用用到的一种机制. 和程序没有关系, 当程序使用的内存超过了分页的大小时, 操作系统会自动把它映射到多个物理页面中去的. 完全不需要你操心.

堆栈是程序运行时用来传递参数, 分配局部变量, 保存函数返回地址的一块虚拟内存区域, 在执行 push / pop 这类汇编代码时会访问这些内存. 每个线程一个堆栈, 在创建线程的时候可以指定堆栈的大小. 主线程的堆栈大小可以有编译选项来指定, VC 默认为 1M.

读书人网 >C++

热点推荐