问题标签 [static-allocation]

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 投票
2 回答
22809 浏览

c++ - std::array<> 是否只保证在堆栈上分配?

std::array<int,10>(没有我自己使用)是否new保证被分配在堆栈中而不是 C++ 标准的堆中?

说清楚,我不是说new std::array<int, 10>。我主要想知道,是否允许new在其实现中使用标准库。

0 投票
1 回答
487 浏览

c - C99:是否可以设计一个没有动态分配的抽象数据类型?

我必须设计一个抽象数据类型,但我不允许使用动态分配。好像有点棘手……

我目前拥有的:

在 adt.c 中:

在 adt.h 中,丑陋的部分来了:

现在我可以像这样使用它:

在专业方面,我有一个不透明的数据类型,我不必使用动态分配。

不利的一面,这只是丑陋的。当我尝试不在函数内(例如全局)调用 ADT_DATA( ... ) 时,我收到一条错误消息。

有可能改善这一点吗?目前,我唯一的选择是公开数据类型......

TIA 为您的想法!

0 投票
2 回答
106 浏览

c++ - 数组的C/C++静态定义循环数据转发定义

我正在寻找最好的方法来静态定义需要循环链接的 C/C++ 数据结构。例如,一棵树,其中孩子和父母都需要彼此的指针。

以上编译(g++ 5.2)。该extern关键字似乎允许我从opsinto创建一个前向引用ops_subops,而另一个方向自然而然地工作,因为ops之前ops_subops

我不喜欢的是,我更喜欢两个数组static(不在目标文件中创建公开可见的符号)。

我可以对其中一个方向使用整数索引,但这似乎有点做作,我宁愿让链接器为我解析地址。

任何人都有一个神奇的关键字来完成这项工作?

谢谢!

编辑:我需要避免使用 C++ 静态构造函数和前沿 C++17 扩展(遗憾的是)。而且我的方法需要独立于平台。

0 投票
1 回答
698 浏览

c - sizeof 复合文字数组

我正在尝试静态分配一些结构,每个结构都包含两个成员:一个指向结构数组的指针,以及该数组的大小。

这是代码的工作版本:

但不是单独定义数组,然后在定义结构时引用该数组,我想用数组文字初始化指针,以便将其全部包含在结构定义中,以便我认为提高可读性:

是否可以在编译时自动获取该数组文字的大小?(或者我是在滥用语言并使事情变得比应有的更难吗?)

编辑:基于奥拉夫对类似问题的回答和约翰博林格的评论,这就是我最终得到的结果:

0 投票
1 回答
154 浏览

c - libc中的“静态分配”到底是什么意思?每个库实例一个?每个程序实例一个?

在 (g)libc 中,例如在localtime等时间和日期函数中,手册说:

返回值指向一个静态分配的字符串,随后调用任何日期和时间函数可能会覆盖该字符串。

据我所知,我的程序是单线程的。我使用asctimelocaltime等“MT-Unsafe”功能是否安全?

即使内存中只有 1 个 (g)libc 库实例?(即作为一个动态库。)

“静态”是指“我的程序静态”(为每个程序实例分配一个新的缓冲区实例......),“进程静态”(每个进程一个缓冲区实例 -这表明)还是静态的(libc )库(与库(-fragment)实例一样多的缓冲区实例)?

(我知道问题#8694365,但我的有点不同。)

0 投票
2 回答
242 浏览

c++ - 用静态分配替换动态分配

我有一个项目,我必须定义一个不同维度的数组(如三角形),因为我不允许使用 std::vector 或其他容器类。为此,我使用了一个指针数组。通常,我会这样做:

但是我一定不能使用动态内存!我以为这样做

会成功的。但它没有。相反,当我遍历数组并打印内容时,我得到了垃圾。那么,如何用静态分配替换动态分配?

0 投票
0 回答
458 浏览

static-allocation - 编译器设计中的静态分配和堆栈分配

我不清楚是静态和堆栈分配是什么?静态分配是静态的,堆栈分配是动态的吗?那么堆分配属于哪里呢?

激活记录与此有何关系?我认为激活记录是一个类似于激活树的概念性东西,并没有任何物理存在。

以下目标机器码是什么意思?

静态分配:

堆栈分配:

0 投票
3 回答
847 浏览

c++ - 是否可以在不使用 C++ 中的堆的情况下创建类 String?

我想编写自己的类 String,它的接口类似于 std::string。字符串类不应使用动态内存分配。

我需要一个 c-tor:

并且应该有包含不同(不知道)元素数量的选项卡,所以我在编译时不知道大小。

在我看来这是不可能的,因为如果我们在编译之前不知道数组的大小,我们就无法在没有动态分配的情况下创建它——当然,为 500 个字符创建缓冲区,然后 String 类只能是 500,这不是我的期望。

你有什么主意吗?也许有什么方法可以创建我会缩小以适应的缓冲区吗?感谢帮助!

0 投票
1 回答
166 浏览

c++ - 嵌入式 C++:没有动态分配的动态类型?

这是我的问题,简化:

  • 我有一个 C/C++ 代码,C 用于服务,C++ 用于处理。
  • 我在 C 中有一个接口,它返回一个结构 RawData,其中包含循环更新的信息。
  • 我有一个虚拟妈妈班“动物”
  • 我有一个从母亲类继承的已知动物列表。
  • 我有一个“建筑”类,其中只有一个动物,但在实例化建筑物时我不知道它的类型。

这就是我苦苦挣扎的地方:

  • 在建筑物实例化期间为建筑物中的动物分配内存而不知道其类型,
  • 动物的类型和属性可能会周期性地变化 换句话说:静态分配的动态类型是否可能?那么,我怎样才能调用这些实例以便调用正确的方法呢?

这是我的限制:

  • 嵌入式系统
  • 没有动态内存分配

我虽然关于:

  • 具有 unique_ptr 的工厂设计模式效果很好!!!...但是,在堆上:(
  • 对象池?
  • 动态类型:但没有动态分配是不可能的,是吗?

有没有可以满足我需求的设计/模型?

谢谢!

0 投票
4 回答
779 浏览

c - 在 C 中释放本地定义的变量

假设我们有以下代码:

在 foo() 返回之前,C 中是否有一种(最好是可移植的)方法从运行时堆栈中释放缓冲区(类似于添加 esp,汇编中的 100) ?