有什么方法可以为堆管理指定我自己的分配器/解除分配器函数,而不是为 bison 中的纯推送解析器指定 malloc()/free() 吗?
最佳答案
大多数 Bison 的内存分配都可以用宏重定向 - 在序言中(在 %{
和 %}
之间)你可以写
#define YYMALLOC mymalloc
#define YYFREE myfree
然后 Bison 将调用 mymalloc
和 myfree
而不是 malloc
和 free
。但是,它希望您提供的任何函数都具有与标准 malloc
和 free
完全相同的类型签名;没有办法让它传递额外的/不同的参数。如果我是你,我不会使用类似函数的宏。更糟糕的是,在我的副本 (Bison 2.4.1) 中,yypstate_new
直接调用了 malloc
,没有覆盖可能——这可以说是一个错误。
关于c - Bison 推纯解析器中的堆处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376833/