问题标签 [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.
c - 静态内存分配和动态内存分配的区别
我想知道静态内存分配和动态内存分配有什么区别?
你能用任何例子解释一下吗?
c++ - QT - 主要小部件 - 堆栈还是堆?
我对是否应该在堆栈或堆上初始化我的主要小部件有点困惑。在“使用 QT 4 进行 C++ GUI 编程”中,主要小部件在堆栈上进行初始化。在我说更多之前,我将解释我的意思:
现在,也许这仅仅是因为它更安全,也许是因为他们不想让读者对 QT 中的内存分配感到困惑。忽略对继承自 QObject 的对象的任何删除肯定会让读者“忘记”QT 对象的内存管理。但是,我的问题是,我们应该更喜欢这种方法还是以下方法:
我提出这个问题的主要原因是我通常更喜欢遵循选择堆与堆栈的模式:
- 如果项目很大 -堆
- 如果项目是长期的 -堆
- 否则 -堆栈
现在,我想我的问题可以归结为两个问题:
- QWidget 是否大到我应该担心堆栈溢出的程度?
- 一般应用程序的堆栈有多大?我什么时候应该担心堆栈溢出(除了明显的递归函数)?
我意识到 QWidget 本身不太可能导致堆栈溢出,但当然这将在我的应用程序可能具有的任何其他堆栈使用之上。
c++ - 内存非常有限的嵌入式系统中的 STL
我目前正在使用 ARM Cortex M3 处理器和 64 KB SRAM 构建嵌入式系统。目前,我正在寻找一种方法来确保 STL 容器的确定性性能,其中包括确保我不会在运行时耗尽内存。
我主要关心 STL 容器如何执行动态内存分配。虽然我可以使用自定义分配器让这些结构从我预留的池中获取内存,但我需要为每个结构设置一个单独的池,以确保结构的一个实例不会占用另一个实例的空间。
我正在与该项目中的其他人合作,他们不想关心内存的原始分配,而是希望能够利用“众所周知的”数据结构(堆栈、队列、双端队列等)。因此,我目前正在考虑围绕 C 数组构建包装器以提供这些结构。这将启用支持这些容器所需的内存的静态分配,并允许其他开发人员根据编译器提供的代码大小信息在运行时了解他们已实例化的容器的大小。在我看来,这保证了在运行时不会发生内存中断问题,并大大简化了系统设计。
另一种选择是在系统初始化时分配 STL 容器。在初始化期间之后,不会发生额外的动态内存分配。然而,据我所知,标准的 C++ STL 数据结构不支持这一点——它要求诸如堆栈之类的容器能够被预先分配(类似于向量)。
如果对我提出的围绕标准 C 数组构建类的建议有任何评论,我将不胜感激?另外,有没有更简单的方法在编译时分配静态大小的 STL 容器,例如静态大小的堆栈或队列?(我知道矢量可以做到这一点,但其他我不确定)
注意:我已经阅读了另一个问题(Embedded C++ to use STL or not),但是这个问题的作者没有说明他们有多少内存(除了他们如何使用 ARM7 进程)或似乎是考虑类似于我的解决方案。
第二个注意事项:我知道对于一些开发人员来说,64 KB 的 SRAM 可能看起来像很多内存。事实上,我已经在内存显着减少的 AVR 处理器上进行了开发,所以我理解这个观点。然而,从我目前(可能是不知情的)的观点来看,在谈论 STL 容器时,64 KB 的内存并不算多。
c++ - 如何从被调用者的角度检测内存是动态的还是静态的?
注意:当我在这里说“静态字符串”时,我指的是 realloc 无法处理的内存。
嗨,我编写了一个带有 char * 参数的过程,如果内存不能通过 realloc 重新定位/调整大小,我想创建一个副本。照原样,该过程是一个“重”字符串处理器,因此无知并复制字符串是否是静态的肯定会在将来导致一些内存开销/处理问题。
我尝试使用异常处理程序来修改静态字符串,应用程序只是退出而没有任何通知。我退后一步,看着 C 说:“我没印象。” 如果我听说过一个,那将是一个例外。
我尝试使用异常处理程序在静态变量上调用 realloc ... Glib 报告它无法找到结构的一些私有信息(我确定)我不知道并且显然在程序上调用 abort意味着它不是可以用 longjmp/setjmp 或 C++ try, catch finally 捕获的异常。
我很确定必须有一种方法可以合理地做到这一点。例如,动态内存很可能不在静态内存附近的任何地方,所以如果有办法从地址泄露这些信息......我们可能只是有宾果游戏......
我不确定 C/C++ 预处理器中是否有任何宏可以识别宏参数的来源和类型,但如果没有,那就太愚蠢了。宏汇编器对这类事情非常聪明。从缺乏强大的错误处理来看,如果没有,我不会感到惊讶。
memory-management - MPMoviePlayerViewController 的IOS分配问题
在 viewDidLoad 的 ipad 应用程序中,我在第一个视图中设置了一个视频,以便进行介绍。在分配工具中,我看到在运行视频时分配的内存增长到 120MB,好吧我不在乎,但是在视频完成后,我希望该内存再次变为 0,但坚持到 120MB,我做错了什么?
}
c++ - 静态分配的可变大小数组如何在 C++ 中工作?
我认为这不会编译,但它实际上(使用 g++ 命令)。
我后来发现,即使标准 C++ 不支持可变大小的数组,GCC 实际上也允许可变大小的数组,这很奇怪!因为我听到每个人都说创建可变大小数组的唯一方法是使用动态分配 likeint* array = new int[size];
或 better std::vector
。我以为 GCC 不允许那段代码!
无论如何,我的理论问题是,myArray
数组是分配在堆区还是堆栈区?
c - 当 C 中没有足够的内存用于静态分配时会发生什么?
当您动态分配内存时,例如,如果没有足够的内存可用于满足请求,则malloc(1024 * sizeof(char))
结果指针设置为。NULL
当没有足够的内存来满足静态分配时会发生什么char c[1024]
?
stack - 静态分配内存一次还是动态分配更快?
我是机械工程专业的研究生。我的研究小组有一个用 C++ 编写的内部有限元代码。我注意到向量和数组的大量内存是静态分配的,例如:
在元素.h
在 Element.C 中
以这种方式,向量只为到达此函数的第一个元素分配一次,其余对象只是重复使用该内存空间。
第一个开始开发代码的人比 C++ 更了解 C,这就是为什么很多都是这样编写的。
在组中静态分配这些向量和数组的想法是,只分配一次这些大块内存并重复使用它会更快;与必须为每个有限元素或每次调用函数时(例如使用 alloca)分配相同的数组相比。这是真的?速度差别真的很大吗?
我们正试图就此得出结论,以决定是否应该保留静态内存分配或摆脱它。几个星期以来,我一直在寻找这个问题的答案,但没有运气。希望您的意见有助于得出结论。
谢谢。
埃尔南
c - 静态变量和静态内存分配的区别?
一位经验丰富的 C 开发人员告诉我,静态变量的概念与静态内存分配的概念不同。这个对吗?如果是这样,这两个概念有什么区别?
静态内存分配的正式定义是什么?它与静态变量的正式定义有何不同?
这个问题仅涉及这些概念如何映射到 C 编程语言。
c++ - C++ 内存管理和 Misra
我需要一些关于 C++ 内存管理和MISRA指南的说明。
我必须实现一个与 MISRA 兼容的程序,因此我必须遵守一条重要规则:不能使用“新”运算符(动态内存堆)。
在这种情况下,对于任何自定义对象,我必须使用静态分配:
例如:
我的班级Student
有一个构造函数Student(int age)
。每当我必须实例化一个学生对象时,我必须这样做:
这将创建一个学生对象 exampleOfStudent。这样我就不必担心我不使用析构函数。这一切都正确吗?还有其他方法可以使用静态内存管理吗?我可以以相同的方式使用 std::vector 或其他数据结构吗?例如,我可以将 Student 实例(我创建为 Student exampleOfStudent(theAge))添加到 std::vector 中吗?