如果你写了一个没有指针的C程序

One*_*ude 1 c pointers

如果你编写了一个没有指针的C程序那么这是否意味着程序可以消耗多少内存?如果没有,那么在给定代码中变量的数量/类型的情况下,除了可能消耗更多内存之外,还有哪些其他方式?

此外,指针本身使用了多少内存?

- 编辑 -

我看到这在答案中出现了很多

如果不使用动态分配,则限制为堆栈大小

这是否意味着如果你有动态分配,系统/编译器会随着你的进度增加/减少你的堆栈?

--EDIT#2

当我说"绝对限制多少内存......"时,显然带有指针的程序无法获得无限的内存(但这会有多甜?),但我的意思是,程序可以消耗多少内存可以量化为有限数,或者还有其他方式让内存继续增长,超出仅为变量分配的数量.

@djechlin和@wallyk指出递归可能导致内存动态增加.

显然,似乎可以创建一个内存使用受其架构限制的程序,但它必须是一个相当简单的程序来实现这一点.

感谢所有伟大的答案和热情!

Cof*_*ode 5

如果编写程序时没有动态分配任何内存(完全可行且非常常见),但您将受限于编译器和/或环境分配给程序的堆栈大小.

如果你想通过堆栈使用比你可用更多的内存并且不想使用动态内存(参见精神错乱),你可以将变量等存储在一个临时文件中并对其进行写入/读取,就好像它是一个缓冲区一样.记忆.唯一的问题是,如果你真的不想使用指针,你实际上无法打开文件!(在跨平台,遵循标准;良好程序员的方式)C标准库函数fopen返回一个FILE*用于文件操作函数.

哦,回答你关于指针有多大的问题:

这取决于.

在大多数通用操作系统上,32位系统将具有32位指针(4个字节),而64位系统将具有64位指针(8个字节)

您可以通过编写一个小测试程序来了解它们在您的系统中有多大:

#include <stdio.h>

int main(int argc, char *argv[]){
    printf("%zu\n", sizeof(void*));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

动态内存管理使用称为"堆"的堆栈空间以外的东西.堆可以动态分配到任何必要的大小(受系统参数限制),但是必须使用malloc/的调用对显式地释放堆上分配的所有内存,free因此程序员对动态内存管理负有更多责任,但也更有可能拧紧与访问释放的内存和悬空指针等事情.

这是新C程序员最关注的事情.(通常非简单malloc的像动态3D数组等)