问题标签 [dynamic-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.
memory-management - 堆栈和堆是什么以及在哪里?
编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,但没有解释这两个东西是什么。我还没有阅读对此的明确解释。我明白什么是堆栈。但,
- 它们在哪里,是什么(物理上在真实计算机的内存中)?
- 它们在多大程度上受操作系统或语言运行时的控制?
- 他们的范围是什么?
- 是什么决定了它们每个的大小?
- 是什么让一个更快?
c - C中动态分配数组的数组
我并不真正了解 C 中的一些基本内容,例如动态分配数组。我知道你可以这样做:
为了声明一个二维数组(随后将使用一些 *alloc 函数分配)。也可以通过做“轻松”访问它*(*(m + line) + column)
。但是我应该如何为该数组中的元素赋值呢?使用 gcc 以下语句m[line][column] = 12;
因分段错误而失败。
任何文章/文档将不胜感激。:-)
c++ - 何时使用 Malloc 而不是 New
只是重新阅读这个问题:
C ++中的“new”和“malloc”和“calloc”有什么区别?
我检查了答案,但没有人回答这个问题:
- 我什么时候会使用 malloc 而不是 new?
有几个原因(我可以想到两个)。
让最好的漂浮到顶部。
c - 跟踪内存 malloc/free 的简单 C 实现?
编程语言:C 平台:ARM 编译器:ADS 1.2
我需要跟踪melloc/free
项目中的简单调用。我只需要非常基本地了解当程序分配了所有资源时需要多少堆内存。因此,我为malloc/free
调用提供了一个包装器。在这些包装器中,我需要在调用时增加当前内存计数,malloc
并在调用时减少它free
。这个malloc
案子很简单,因为我有从调用者那里分配的大小。我想知道如何处理这种free
情况,因为我需要将指针/大小映射存储在某处。这是 C,我没有标准的地图来轻松实现这一点。
我试图避免在任何库中进行链接,因此更喜欢 *.c/h 实现。
所以我想知道是否已经有一个简单的实现可以引导我。如果没有,这是继续实施的动力。
编辑:纯粹用于调试,此代码不随产品一起提供。
编辑:基于 Makis 的回答的初始实施。我会很感激对此的反馈。
编辑:重新实施
c++ - 在 C++ 中调整动态堆栈分配的大小
我正在编写一个使用包围体层次结构来加速光线追踪的小型光线追踪器。长话短说,我有一棵二叉树,我可能需要访问多个叶子。
当前我有一个左右两个孩子的节点,然后在 travel() 期间,如果某些条件,在此示例 intersect() 中,访问孩子:
这种方法使用递归方法调用,但是,我需要尽可能优化这段代码......并且根据 IA-32 的优化参考手册,超过 16 的函数调用可能非常昂贵,所以我想这样做使用 while 循环而不是递归调用。但我不希望进行动态堆分配,因为这些很昂贵。所以我在想,也许我可以利用这样一个事实,即每次 while 循环从堆栈开始时都会处于相同的位置。在以下非常丑陋的黑客攻击中,我依靠 alloca() 始终分配相同的地址:
然而令人惊讶的是,这种方法似乎确实失败了:)但只要堆栈小于 4 或 5,它就可以工作......我也非常有信心这种方法是可能的,我只是真的认为我需要一些帮助来实现它正确。
那么如何从 C++ 手动操作堆栈,是否可以使用一些编译器扩展......或者我必须这样做是汇编程序,如果是这样,我如何编写汇编程序而不是可以用 GCC 和 ICC 编译.
我希望有人可以帮助我......我不需要一个完美的解决方案,只是一个黑客,如果它有效,它就足以达到这个目的:)
问候乔纳斯·芬尼曼·詹森
multithreading - Valgrind 处理线程和机器级同步指令的能力如何?
我有一个高度并行的 Windows 程序,它使用大量线程、手动编码的机器同步指令和自制的并行安全存储分配器。唉,存储管理有一个漏洞(不是分配器中的同步漏洞,我很确定),我想找到它。Valgrind 被推荐为查找存储管理错误的好工具。在这些情况下使用 Valgrind 有什么经验吗?
c++ - 您应该能够分配多少内存?
背景:我正在编写一个处理大量地理数据的 C++ 程序,并希望一次加载大块以进行处理。我只能使用为 32 位机器编译的应用程序。我正在测试的机器运行的是 64 位操作系统(Windows 7)并且有 6 gig 的内存。使用 MS VS 2008。
我有以下代码:
我希望我能够分配内存,直到应用程序达到 32 位寻址的 4 GB 限制。但是,当 nBandBytes 为 466,560,000 时,新的在第二次尝试时会抛出 std::bad_alloc。在这个阶段,该进程的工作集(内存)值为 665,232 K 所以,我似乎无法获得甚至分配的内存。
有人提到 32 位 Windows 中的应用程序有 2 gig 限制,使用 win32 的 /3GB 开关可以将其扩展到 3 gig。在那种环境下这是一个很好的建议,但与这种情况无关。
在 64 位操作系统和 32 位应用程序下,您应该能够分配多少内存?
c - 当 malloc/free 出现在 C 中的循环中时出现分段错误
我有一个基本上看起来像这样的程序:
这只是骨架形式,但它希望能提供足够的图片。无论如何,它通常运行良好,但对于 n1、n2 的某些值,free(cpplptr) 似乎会导致分段错误。它只被调用一次,我在 malloc() 调用 cplptr 之后和 cplptr 的相应 free() 之前检查地址。
地址匹配,这意味着 free() 应该释放它应该释放的东西,对吧?gdb 给出程序接收到的信号 SIGSEGV,分段错误。0xb7ce179b 在?? () 来自 /lib/tls/i686/cmov/libc.so.6 和步骤找不到当前函数的边界
有没有另一种方法来实现类似的东西来避免分段错误?
感谢一百万您的建议!知道发生了什么吗?
c++ - 你能在堆上声明一个指针吗?
这是在 C++ 中在堆上创建变量的方法:
ptr 显然是指向新 T 的指针。我的问题是,你能做到这一点:
这似乎会导致一些非常非常危险的代码。有谁知道这是否可能/如何正确使用它?
objective-c - 对象分配变得疯狂
在检查 Instruments Object Alloc 时,我的 CFArray 和 CFString 分配都变红了。
对象似乎还活着但没有被使用,这是因为在这两种情况下,直方图的使用部分是总直方图(已变为红色)的 1/10。
该应用程序是具有 7 个视图控制器的照片库应用程序。为每个单独的视图控制器加载缩略图,然后根据需要加载图像。只是在两个视图控制器之间来回移动会不断推动 CFArray 直方图。
让我知道在这里发布代码是否会有所帮助。
谢谢,P