加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的动态堆栈分配

发布时间:2020-12-16 10:16:55 所属栏目:百科 来源:网络整理
导读:我想在堆栈上分配内存. 听说_alloca / alloca,我明白这些是编译器特有的东西,我不喜欢. 所以,我想出了我自己的解决方案(这可能有它自己的缺点),我希望你检查/改进它,这样我们就可以一劳永逸地使用这些代码: /*#define allocate_on_stack(pointer,size) __
我想在堆栈上分配内存.

听说_alloca / alloca,我明白这些是编译器特有的东西,我不喜欢.

所以,我想出了我自己的解决方案(这可能有它自己的缺点),我希望你检查/改进它,这样我们就可以一劳永逸地使用这些代码:

/*#define allocate_on_stack(pointer,size) 
    __asm 
    { 
        mov [pointer],esp; 
        sub esp,[size]; 
    }*/
/*#define deallocate_from_stack(size) 
    __asm 
    { 
        add esp,[size]; 
    }*/

void test()
{
    int buff_size = 4 * 2;
    char *buff = 0;

    __asm
    { // allocate
        mov [buff],esp;
        sub esp,[buff_size];
    }

    // playing with the stack-allocated memory
    for(int i = 0; i < buff_size; i++)
        buff[i] = 0x11;

    __asm
    { // deallocate
        add esp,[buff_size];
    }
}

void main()
{
    __asm int 3h;
    test();
}

用VC9编译.

你在其中看到了什么缺陷?
例如,我不确定从ESP中减去“任何类型的CPU”的解决方案.
此外,我想使注释掉的宏工作但由于某种原因我不能.

解决方法

对不起,但你最好不要使用alloca而不是那种东西.它不仅具有特定的x86,而且如果使用优化编译,它可能会给出意想不到的结果.

alloca受到许多编译器的支持,因此您不应该很快遇到问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读