问题标签 [static-memory-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 投票
1 回答
803 浏览

c++ - Visual Studio C++ 0xC0000005 错误:被内存分配混淆

我是一名 Java 开发人员,但现在我需要一个 C++ 库,而我对这种语言的经验并不丰富。特别是,我总是对指针、引用和内存分配感到困惑。我认为这就是我正在开发的矩阵类中出现错误的原因。

主要代码:

matrix.cpp有趣的代码:

完整matrix.hpp文件:

此类基于矩阵示例中给出的示例

错误显示“0xC0000005:访问冲突读取位置 0x5820A694”。所以我猜测内存分配是错误的和/或有一个超出范围的数组和/或我弄乱了“&”运算符。

编辑:我得到以下跟踪:

  • 这个 0x00dffe24 {values={ size=9 } rows=3 } 矩阵 *

所以,矩阵确实存在,但由于某种原因我得到了错误。

0 投票
1 回答
711 浏览

c++ - 在堆上分配指针的原因是什么?

可能这个问题已经被问过了,但我找不到。如果您看到了什么,请重定向我。 问题: 使用有什么好处:

超过

通过阅读其他主题,我了解到第一个选项在堆栈上分配一个空间并使指针指向它,而第二个选项在堆上分配一个空间并使指针指向它。但是我还读到第二个选项很乏味,因为您必须使用删除来释放空间。那么为什么要使用第二种选择。我是菜鸟,所以请详细解释。

编辑

都编译并给我“wouf !!!”。那么为什么要使用“new”关键字呢?

0 投票
2 回答
1935 浏览

c++ - 测量静态、堆和堆栈内存?(c++, Linux - Centos 7)

我想分别测量堆栈、堆和静态内存,因为我对每一个都有一些限制。

为了测量堆内存,我使用了 valgrind->massif 工具。Massif 也应该可以测量堆和堆栈内存,但它显示出奇怪的结果:

  • 没有 --stacks=yes 的最后一个快照提供了总(B)=0,有用的堆(B)=0,额外的堆(B)=0(所以一切都很好)

  • 最后一个带有 --stacks=yes 的快照提供了 total(B)= 2,256,有用堆(B)=1,040,extra-heap(B)=0,stacks(B)=1,208(即使它是相同的命令和相同的二进制测试...不知道为什么...)

所以最后我需要一个工具来测量 c++ 二进制文件使用的堆栈和静态内存,欢迎提供一些帮助:)

谢谢你的帮助 !

- - - - - - 编辑 - - - - - - -

除了 Basile Starynkevitch 评论之外,为了解释我对静态、堆栈和堆内存的含义,我从 Dmalloc 库文档中获取了它:

  • 静态数据是其存储空间编译到程序中的信息。

    /li>
  • 堆栈数据是在运行时分配的数据,用于保存函数内部使用的信息。该数据由系统在称为堆栈空间的空间中管理。

    /li>
  • 堆数据也在运行时分配,并为程序员提供动态内存能力。

    /li>
0 投票
2 回答
1192 浏览

c++ - C++中的struct是如何分配内存的?是动态内存分配还是静态内存分配?

我对 C++ 编程很陌生。所以我只想知道结构的内存分配是静态的还是动态的?这是我基本上拥有的代码。

0 投票
0 回答
38 浏览

c++ - 在 C++ 中运行时输入数组的大小然后初始化它?

伪代码:

为什么这没有给出错误?如果允许这样做,为什么我们需要 new 和 delete 运算符?我能想到的唯一区别是 new 将在堆中分配内存,这将在堆栈中分配内存。

0 投票
1 回答
90 浏览

c++ - 字符指针数组内存分配

如何为 char 指针数组和双指针完成内存分配。

在编译器给出的上述代码输出中是-nowledge

我的问题是,如何将值分配给指针 p 以及如何递增。

0 投票
1 回答
272 浏览

c++ - 在没有动态内存的世界中我需要虚拟析构函数吗?

当对象(可能)从基类指针中析构时,需要虚拟析构函数。

考虑一个在嵌入式系统中常见的没有动态内存的程序。在这里,使用newdelete触发链接器错误,因为未实现所需的底层分配器。因此,开发人员只使用静态分配的对象(在 bss/data 部分)或自动分配的对象(通常在堆栈上)。

在这样的系统中,是否存在真正需要虚拟析构函数的情况?(假设没有人感到无聊并在某个指针上手动调用析构函数。)

在我看来,静态和自动分配总是调用正确的析构函数。我想念什么吗?是否有任何角落案例?与 unique_ptr 和自定义删除器一起使用的静态对象池怎么样?

0 投票
2 回答
393 浏览

c++ - 如果我可以创建一个数组,为什么我需要动态内存分配?

我正在阅读有关动态内存分配和静态内存分配的信息,并发现以下有关动态内存分配的信息:

在前面章节中看到的程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。但是可能存在程序的内存需求只能在运行时确定的情况。例如,何时需要的内存取决于用户输入。

所以我用 C++ 编写了以下程序:

这个程序有效。我不明白它是如何工作的。这里的大小是什么时候确定的?在这种情况下如何分配向量?

0 投票
0 回答
59 浏览

c++ - 在运行时给定内存静态分配的变量

这个问题已经困扰了我很长一段时间了。

现在,如果输入的数字是偶数,则将创建一个双精度数,否则将创建一个字符。n 的值是在运行时给定的,因此内存在运行时分配给 double/char。但是不仅动态创建的变量在运行时分配内存吗?

0 投票
2 回答
999 浏览

c++ - c++中vector的静态分配和动态分配有什么区别?

我知道以下情况的区别:

对于情况 1,数组的内存是在堆栈上分配的。

对于情况 2,在堆上分配内存并返回一个指针。

但是下面两个声明有什么区别,因为向量内存总是在堆上分配