@
Building 所以你也太小看编译器的下限了。
“申请内存”?你是不是不知道直接不提供给你“申请内存”的实现也符合 ISO C ?你先给我说说你怎么确保一个 strictly conforming 的 C 程序“申请内存”还一定能过?
顺便,让 int main(){int a;}直接给 stack overflow 都是符合 ISO C 的。你说你见到过的编译器都会过?行,我写个程序判断源代码是不是长这样,如果是就直接给你生成一跑就会挂掉的二进制代码,不是就扔给 gcc ,不也是个符合 ISO C 的实现?(不符直接扔标准条款谢谢。)
(顺便,int a;不算“申请”内存。)
所以用得着你个“申请内存”个什么寄玩意儿啊……
@
hxndg 上面举例子过了,用到个自动对象都可以给你当作栈爆了,也是合乎规矩的。即便没什么实现那么不要脸。
实际上这是 ISO C 比较下限,事实上允许实现随便钦定资源限制,但一点都没说最小限制是什么,只说超过限制 UB 。
而且这个比“分配内存”特殊在于原则上是没法直接加规则修的,因为 ISO C 抽象机里根本就没调用栈这种东西,自动对象不是被“分配”的。(但显然又要占资源,否则不确保不会爆栈的现有实现都不符合 ISO C 了。)
ISO C++同理( core lang 里唯一一个提到 stack 的是 stack unwinding )。
其实这种设计就没什么可移植性。
/proc/pid/limit 这个倒是比较有实际意义的好例子。不过,这个显示不出语言设计不讲理的地方。