Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831030
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-15 10:48:05

// 感谢[迷迷糊糊]提供_alloca我知
// _alloca的功能是在栈上动态分配空间
// 在栈空间不足的情况下会产生SEH异常,需要__try保护
// 不能对同一段代码同时采用SEH异常机制和C++异常机制,因此我使用异常规格指明构造函数不抛出异常
// 以下是一个完整的演示


#include
#include
#include
#include
using namespace std;
#define EXCEPTION_STACK_OVERFLOW ((unsigned long)0xC00000FDL)

int main( void )
{
    struct Test
    {
        int i;
        Test()  throw() : i(1) { cout << "construct" << endl; }
        ~Test() throw()        { cout << "destruct"  << endl; }
        void print() throw()   { cout << i << endl; }
    };

    __try
    {
        Test& t1 = *new( _alloca( sizeof(Test) ) ) Test;
        t1.print();
        t1.~Test();
    }
    __except( EXCEPTION_STACK_OVERFLOW==GetExceptionCode() ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
    {
        cerr << "alloca fail.\n";
    }

    return 0;
}
阅读(1373) | 评论(9) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-15 10:49:48

迷迷糊糊
直接使用_alloca的人也许不多,但使用 A2W / W2A 的一定不少,
不知道有没有人用它转换 nMB 的字符串^_^

网友评论2012-11-15 10:49:47

迷迷糊糊
直接使用_alloca的人也许不多,但使用 A2W / W2A 的一定不少,
不知道有没有人用它转换 nMB 的字符串^_^

网友评论2012-11-15 10:49:33

周星星
鲁迅说过,世上本没有路,走的人多了就成了路。
_alloca 也许对C++没什么大作用,但用在C中可以避免堆内存泄漏,尤其在有很多return的函数中。当然C语言中根本也不需要_alloca了,C99中的数组本身就可以动态在栈上分配。看来 _alloca 真的是没什么用,哈哈!

网友评论2012-11-15 10:49:15

阿荣
应该尽量在项目中使用不为人熟知的技术