有没有办法告诉C永远不要动态分配内存?

有没有办法告诉C永远不要动态分配内存?,c,memory-management,C,Memory Management,我想写一个内存恒定的C程序。它不能分配超过一定数量的内存 int main(){ int memory[512]; int i = 5; i = i + 5; memory[50] = i; }; 注意,在这个示例中,i=5和i=i+5将分配内存。我想完全避免内部内存分配过程,我认为这有点慢。有没有办法告诉C直接在我的内存阵列上分配它 int memory[512]; int i = 5; 通过这样做,您已经分配了内存。即使在100之后不填充元素,变量内存的总分

我想写一个内存恒定的C程序。它不能分配超过一定数量的内存

int main(){
   int memory[512];
   int i = 5;
   i = i + 5;
   memory[50] = i;
};

注意,在这个示例中,i=5和i=i+5将分配内存。我想完全避免内部内存分配过程,我认为这有点慢。有没有办法告诉C直接在我的内存阵列上分配它

int memory[512];    int i = 5;
通过这样做,您已经分配了内存。即使在100之后不填充元素,变量内存的总分配量仍然为512 int,变量i的总分配量为1 int


如果您需要动态分配,您可以检查malloc或calloc。

您应该更改,我认为这对我来说有点慢,我确信它不会影响程序速度。

仅使用全局声明的变量


然而,由于其他明显的原因,这是一个不好的建议:

首先,本地堆栈变量的分配非常快,通常在编译时函数的堆栈帧被布置好时发生。在运行时,每个变量没有开销,只是它不是这样工作的

第二,如果你想避免像int i这样的变量;占用更多的堆栈空间,那么必须避免在代码中使用该声明

您可以使用分配的块,但这会很痛苦:

int space[512];

space[0] = 5;
space[0] += 5;
space[50] = space[0];

上面复制了i的使用,但在数组中手动分配空间[0]。当然,上述情况很可能会产生比只有一个普通i更糟糕的代码,所有这些都是为了节省1 int的堆栈空间;i=i+5;是零。方法中的单个int变量没有任何可观的分配成本。编译器在这里有几个选项:

它将尽可能在编译时进行运算,并完全消除变量内存[50]=10;,这意味着在运行时,分配和算法都没有成本

在可能的情况下,它将努力将变量放入CPU寄存器中,使分配成本为零,但仍然需要时间进行运算

否则,它将在堆栈上为变量保留空间,这包括将堆栈指针递减513*sizeofint字节,而不是512*sizeofint字节。这仍然不需要额外的时间。操作系统可能不得不为线程堆栈获取额外的内存页,但这或多或少是一次性成本


这里没有堆分配。只是堆栈分配。不调用malloc可以避免堆分配。堆栈分配可以是avoi…-呃。。。它们是无法避免的。即使int main{}也有堆栈分配。如果调用任何库函数,它们可能在内部使用malloc。你无法阻止这一切。还有,你为什么要这么做?是为了表演吗?堆栈分配已经是最快的了。堆分配可能会很慢。我认为这有点慢-你绝对没有权利假设这个和那个。如果您通过正确地标记代码推断出堆分配导致了主要瓶颈,那么只有这样,您才能继续尝试重写它,从而减少或可能没有堆分配。但同样,这需要大量的测试和测量。请不要进行可怕的过早优化。你可以通过不声明变量来避免它。这种方式只会导致疯狂和痛苦。另外,这有点过早优化的味道。我几乎可以向您保证,动态内存分配不会影响程序的性能。堆栈变量的分配/解除分配在函数开始时略高于ESP-=2048,因此基本上是免费的。