C中的变量存储在内存的什么地方?[关闭]

yzuktlbb  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(192)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

去年关闭。
Improve this question
通过考虑存储器被划分为四个段:数据、堆、堆栈和代码,全局变量、静态变量、常量数据类型、局部变量(在函数中定义和声明)、变量(在主函数中)、指针和动态分配的空间(使用malloc和calloc)存储在内存中的何处?
我认为它们将分配如下:

Global variables -------> data
Static variables -------> data
Constant data types -----> code
Local variables (declared and defined in functions) --------> stack
Variables declared and defined in main function -----> heap
Pointers (for example, char *arr, int *arr) -------> heap
Dynamically allocated space (using malloc and calloc) -------->

我只是从C的Angular 来引用这些变量。
如果我错了请纠正我,因为我是C的新手。

lo8azlld

lo8azlld1#

由于Python中的所有东西都是对象,并且所有对象都可以赋值给变量,因此无法创建不能赋值给变量的无错误值。
然而,顺便说一句,存在永远不能分配给变量的表达式。人们会认为抛出错误的表达式属于这个框,例如1/0,它抛出ZeroDivisionError:

>>> foo=1/0
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    foo=1/0
ZeroDivisionError: division by zero

但事实上,这些表达式可以在try/except语句中捕获,例如下面的语句:

try:
  foo=1/0
except:
  pass

然而,这并不是故事的结束,因为存在导致Python解释器segfault的表达式。我所知道的最短的一个来自Codegolf Stack Exchange:

exec((lambda:0).__code__.replace(co_consts=()))

这将总是使python解释器崩溃,即使在try-except语句中也是如此。

相关问题