问题标签 [storage-duration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
971 浏览

c - 静态 c 函数可以返回本地 char 数组吗?

在 zflog 库中我看到了这段代码

这对我来说似乎很奇怪。我们真的可以从静态函数返回一个本地 c 字符串吗?

0 投票
1 回答
937 浏览

python - Python 有静态对象、栈对象和堆对象吗?

来自 Scott 的 Programming Language Pragmatics

对象生命周期通常对应于三种主要存储分配机制之一,用于管理对象的空间:

  1. 静态对象被赋予一个绝对地址,该地址在程序执行过程中被保留。

  2. 堆栈对象以后进先出的顺序分配和释放,通常与子程序调用和返回结合使用。

  3. 堆对象可以在任意时间分配和释放。它们需要更通用(也更昂贵)的存储管理算法。

C 编程语言有静态对象、栈对象和堆对象。

Python 有静态对象、栈对象和堆对象吗?

在另一篇文章中看到 CPython 在堆上分配所有对象。这是否意味着Python中的所有对象都是堆对象?

但是 Python 也有静态方法。Python中的静态方法是PLP书中的静态对象吗?

谢谢。

0 投票
1 回答
44 浏览

c - 静态对象通常必须初始化吗?

来自 Scott 的 Programming Language Pragmatics

对象生命周期通常对应于三种主要存储分配机制之一,用于管理对象的空间:

  1. 静态对象被赋予一个绝对地址,该地址在程序执行过程中被保留。

  2. 堆栈对象以后进先出的顺序分配和释放,通常与子程序调用和返回结合使用。

  3. 堆对象可以在任意时间分配和释放。它们需要更通用(也更昂贵)的存储管理算法。

例如,在 C 中,静态对象必须用常量表达式(可以在编译时计算的表达式)初始化。

我不确定其他语言是否是这种情况,甚至其他语言也有静态对象。

一般来说,必须初始化静态对象吗?初始化时,是否必须使用可以在编译时评估的表达式进行初始化?

通过初始化,我的意思是显式或隐式(即由语言实现自动完成),而不是取消初始化。所以改写我的问题:一般来说,静态对象可以不被程序或编译器初始化吗?

谢谢。

0 投票
1 回答
92 浏览

c++ - 一个类的静态数据成员和静态方法是C++静态对象吗?

来自 Scott 的 Programming Language Pragmatics

对象生命周期通常对应于三种主要存储分配机制之一,用于管理对象的空间:

  1. 静态对象被赋予一个绝对地址,该地址在程序执行过程中被保留。

  2. 堆栈对象以后进先出的顺序分配和释放,通常与子程序调用和返回结合使用。

  3. 堆对象可以在任意时间分配和释放。它们需要更通用(也更昂贵)的存储管理算法。

PLP书中的C++静态对象中的类的静态数据成员和静态方法吗?

类的静态数据成员和静态方法的存储是在编译时还是运行时分配的?

它们分配在哪里?

谢谢。

0 投票
1 回答
38 浏览

c - 错误输出(指针)

我是一个初级程序员。我在 ac 程序中编写了一个函数,返回一个数组(通过一个指针,附加的程序链接)但是有一些错误。输出应该是 12,但输出是 10。

有人可以帮我找出错误(如果有概念错误)

0 投票
3 回答
283 浏览

arrays - 在文件范围内初始化 C 中的数组大小

我想根据计算初始化一个数组,但是当我尝试这个时编译器给了我一个错误(我使用的是 GCC 版本 6.3.0):

编译器错误如下:

有没有办法在文件范围内做到这一点?

看来我不能使用计算作为 #define 语句的一部分来完成此操作,因为以下给了我同样的错误:

0 投票
2 回答
560 浏览

c++ - 程序如何知道静态变量是否需要初始化?

如标题所示 - 程序如何知道,foo在第二次调用函数时已经初始化:

我想知道,程序是否存储了一些关于哪个静态变量已经初始化的附加信息。

编辑:
我在这里找到了答案:
为什么本地静态对象的初始化使用隐藏的保护标志?
就像我猜的那样——大多数编译器都存储了额外的“保护变量”。

0 投票
1 回答
145 浏览

c++ - 被替换子对象的存储时长

关于下面的代码

[basic.stc]/2

动态存储持续时间与由 new 表达式创建的对象相关联。

有一个类似的问题,同意放置新创建具有动态存储持续时间的对象。因为没有其他措辞可以适用于该问题中的示例。

这是一个精心制作的示例,其中有一些有趣的措辞。[basic.stc.inherit]/1说:

子对象和引用成员的存储时间是其完整对象的存储时间

并且[intro.object]/2保证创建的int对象是 的子对象s

如果在与成员子对象或数组元素 e 关联的存储中创建对象(可能在其生命周期内,也可能不在其生命周期内),则创建的对象是 e 的包含对象的子对象,如果:(
满足要求,我不会复制他们在这里

那么,新创建的int对象有多少存储时间呢?动态还是自动?

0 投票
1 回答
45 浏览

c++ - 线程上下文的静态存储对象优化

编译器可以在多线程程序上下文中优化静态存储对象吗?例如,我要求它知道声明为静态的变量在用于线程中调用的函数时是否会产生副作用。

我从这里阅读了一些答案,但我没有找到任何可以帮助的东西。

0 投票
2 回答
939 浏览

c++ - 参考是否有存储位置?

引用是否有存储位置,还是只是另一个位置的别名?这是否因 C++ 版本而异,还是与所有 C++ 版本一致?如果一个引用有一个存储位置,那么它是否只允许像类型这样的指针上的值语义?

当您这样使用参考时,参考将如何工作:

它占用空间还是别名?