对搞笑小程序的一点小小补充

发布于 2022-09-18 23:17:29 字数 2223 浏览 13 评论 0

<<一个耗尽内存的搞笑小程序>>  在轻松之中说了操作系统对每个进程和线程栈大小的限制.

实际可以在程序耗尽内存(实际是自己的栈用光了)时显示一下当前栈大概的限制.

平台:windows2000+VC

  1. #define WORD_SIZE  sizeof(unsigned int)
  2. void test_my_stack()
  3. {
  4.     unsigned int stack_count;
  5.     try {
  6.         for(stack_count=0; stack_count<0xffffffff; stack_count++)
  7.         {
  8.             __asm push eax   //windows+ VC
  9.         }
  10.     }
  11.     catch(...) {
  12.         printf("stack size is: %u\n", stack_count*sizeof(WORD_SIZE));
  13.     }
  14. }

复制代码
注意: 有与windows 下 vc捕获异常是用操作系统的SEH配合处理的,因此可以获取崩溃时栈的情况.


在linux + gcc 下由于是有编译器实现异常捕获,因此如下同样的代码在linux+gcc 下除了提示段错误外根本不会执行catch 后的代码,
若要达到目的可能只能靠信号处理来配合了.

  1. #define WORD_SIZE  sizeof(unsigned int)
  2. void test_my_stack()
  3. {
  4.     unsigned int stack_count;
  5.     try {
  6.         for(stack_count=0; stack_count<0xffffffff; stack_count++)
  7.         {
  8.            __asm("push %eax");
  9.         }
  10.     }
  11.     catch(...) {
  12.         printf("stack size is: %u\n", stack_count*sizeof(WORD_SIZE));
  13.     }
  14. }

复制代码
[ 本帖最后由 system888net 于 2008-5-17 23:28 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

幸福还没到 2022-09-25 23:17:29

当说到OS相关的时候,要用C语言,并且不要用C语言的扩展功能,否则说明不了问题。

无声情话 2022-09-25 23:17:29

这里用了printf()来跟踪栈的大小变化, 通用一些了,不过运行速度变慢了些.
redhat linux+gcc 的结果: 8382016
windows2000+vc 的结果: 1034544
不同的编译器使同样的c代码栈限制不一样
当然还有其它的办法动态检查出栈的限制值,希望大家给出更好的建议.

  1. #define WORD_SIZE  sizeof(unsigned int)
  2. void test_my_stack()
  3. {
  4.     unsigned int stack_count;
  5.     try {
  6.         for(stack_count=0; stack_count<0xffffffff; stack_count++)
  7.         {
  8.            __asm("push %eax");
  9.           // windows VC 改为 __asm push eax"
  10.           printf("%u,",stack_count*sizeof(WORD_SIZE));
  11.         }
  12.     }
  13.     catch(...) {
  14.         printf("stack size is: %u\n", stack_count*sizeof(WORD_SIZE));
  15.     }
  16. }

复制代码

想挽留 2022-09-25 23:17:29

简单明了,学习了,顶

多孤肩上扛 2022-09-25 23:17:29

导致栈大下的限制默认不一样,但应该可以可以在编译器选项里指定吧?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文