如何获得有关堆栈限制的平台特定信息

时间:2012-08-02 17:37:44

标签: garbage-collection stack interpreter chicken-scheme

我正在玩一个以鸡计划风格进行内存分配的翻译。基本思路是:

int main() {
    instruction instructions[] = { zero_root, print_root, hello_world,
                    hello_world, stop };

    top_ip.go = &instructions[0];

    setjmp(top);

    (*top_ip.go)(top_ip);

    return 0;
}
                                                          89,10-17      Bot

/* The following function is machine dependent */
static bool is_time_to_gc(){
    /* Is allocated on the stack */
    char stack_top;

    /* It's address is therefore the stack's top  */
    return &stack_top >= STACK_LIMIT;
}

static void goto_next_instruction(struct instruction_pointer ip) {
    ++ip.go;

    if (is_time_to_gc()) {
            /*
             * Some complicated garbage collection stuff which I haven't
             * completed yet.
             */

            top_ip.go = ip.go;
            longjmp(top, 0);
    }

    (*ip.go)(ip);
}

并且示例说明是:

static void hello_world(struct instruction_pointer ip) {
    printf("Hello World!\n");

    goto_next_instruction(ip);
}

我需要知道的是STACK_LIMIT的值应该是什么(我还需要知道堆栈是否向上或向下扩展。)如何获得有关堆栈限制的特定于平台的信息?

1 个答案:

答案 0 :(得分:1)

man getrlimit。 通常在/etc/login.conf中检查shell强加的限制 (如果它是sh衍生物,您可以通过键入limit)来查看它们。

:) 欢呼声。