Questions tagged «memory-usage»

15
何时针对一种方法优化内存与性能速度?
我最近在亚马逊接受了采访。在编码会议期间,面试官问为什么我在方法中声明了变量。我解释了我的过程,他挑战我以更少的变量解决相同的问题。例如(这不是从采访),我开始与方法A然后提高它方法B,通过去除int s。他很高兴,并说这将通过这种方法减少内存使用。 我了解其背后的逻辑,但我的问题是: 什么时候适合使用方法A与方法B,反之亦然? 您可以看到,由于方法A被int s声明了,因此它将具有更高的内存使用率,但是它只需执行一次计算即可,即a + b。另一方面,方法B的内存使用量较低,但是必须执行两次计算,即a + b两次。什么时候比另一种使用一种技术?还是其中一种技术总是总是比其他技术更受青睐?评估这两种方法时要考虑什么? 方法A: private bool IsSumInRange(int a, int b) { int s = a + b; if (s > 1000 || s < -1000) return false; else return true; } 方法B: private bool IsSumInRange(int a, int b) { if (a + b …

8
如果我需要在程序的整个生命周期中使用一块内存,是否真的有必要在程序终止之前释放它?
在许多书籍和教程中,我都听说过内存管理的做法很受压力,并感到如果使用完内存后不释放内存,将会发生一些神秘而可怕的事情。 我无法代表其他系统(尽管对我而言,可以假设它们采用了类似的做法是合理的),但是至少在Windows上,内核可以保证清除由以下系统使用的大部分资源(少数情况除外)程序终止后的程序。其中包括堆内存等。 我了解为什么您要在使用完文件后关闭文件以使文件可供用户使用,或者为什么要断开连接到服务器的套接字以节省带宽,但是这样做似乎很愚蠢。必须微管理程序使用的所有内存。 现在,我同意这个问题是广泛的,因为您应该如何处理内存取决于您需要多少内存以及何时需要,因此我将把这个问题的范围缩小到这个范围:如果我需要使用在程序整个生命周期中的内存,在程序终止之前是否真的有必要释放它? 编辑:建议作为重复的问题是特定于Unix家族的操作系统。它的最高答案甚至指定了特定于Linux的工具(例如Valgrind)。该问题旨在涵盖大多数“常规”非嵌入式操作系统,以及为什么在程序的整个生命周期内释放所需的内存是一个好习惯,或不是一个好习惯。

10
在C ++中对向量使用列表的意义是什么?
我已经运行了3个涉及C ++列表和向量的不同实验。 事实证明,即使在中间涉及很多插入操作,带有向量的操作也更加有效。 因此,出现了一个问题:在哪种情况下列表比矢量有意义? 如果向量在大多数情况下似乎更有效率,并考虑其成员的相似程度,那么列表还有哪些优势? 生成N个整数并将其放入容器中,以便容器保持排序状态。通过逐个读取元素并在第一个较大的元素之前插入新的元素,已天真地执行了插入操作。 与向量相比,有了清单,尺寸增加时,时间就会流逝。 在容器的末尾插入N个整数。 对于列表和向量,时间增加了相同的数量级,尽管向量快3倍。 在容器中插入N个整数。 启动计时器。 使用list.sort来排序容器,使用std :: sort来对容器进行排序。停止计时器。 同样,时间以相同的数量级增加,但使用向量平均要快5倍。 我可能会继续进行测试,并找出几个清单可以证明更好的例子。 但是你们阅读此消息的共同经验可能会提供更有成效的答案。 您可能遇到过这样的情况,其中列表更易于使用或执行得更好?

1
Redux内存消耗
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 3年前关闭。 Redux框架支持不变的状态/纯函数范式,该范式促进了根据当前操作从先前状态创建新状态。这种范例的适用性是毋庸置疑的。 我的一个主要问题是,由于Redux精简器急于为每个调用的每个动作从以前的状态返回新的新状态,因此,大量的内存消耗(不要与内存泄漏混淆)将在许多实际应用程序中屡见不鲜。 。考虑到Javascript应用程序通常可以在普通用户设备的浏览器中运行,而该浏览器也可以运行其他几个特定于设备的应用程序以及更多浏览器选项卡和窗口,那么节省内存的必要性就变得越来越明显。 有人真的将Redux应用程序的内存消耗与传统的Flux架构进行了比较吗?如果是这样,他们可以分享他们的发现吗?

4
多少堆栈使用量过多?
最近,当我编写C或C ++时,我会在堆栈上声明所有变量,只是因为它是一个选项,与Java不同。 但是,我听说在栈上声明大的东西是个坏主意。 为什么会这样呢?我认为涉及到堆栈溢出,但是我不清楚原因为何。 堆栈上有多少东西太多了? 我不是想将100MB的文件放在堆栈上,而只是将十几个千字节数组用作字符串缓冲区或其他任何东西。这是堆栈使用过多吗? (对不起,如果有重复,搜索堆栈时会不断引用堆栈溢出。甚至没有调用堆栈标记,我只是使用了抽象标记。)

6
内存对齐有多重要?仍然重要吗?
从现在开始,我已经搜索并阅读了很多有关内存对齐方式,其工作方式和使用方法的内容。我现在找到的最相关的文章是这篇。 但是即使如此,我仍然对此有一些疑问: 在嵌入式系统之外,我们经常在计算机中拥有大量内存,这使内存管理的批评家减少了很多。我完全致力于优化,但是现在,如果我们将相同的程序与或进行比较,是否真的可以有所作为?没有它的内存重新排列和对齐? 内存对齐还有其他优势吗?我在某处读到CPU可以更好地/更快地使用对齐的内存,因为这样可以减少处理的指令(如果你们中的某个人有一篇文章/基准的链接?),在那种情况下,区别真的很重要吗?有没有比这两个更多的优势? 在第5章的文章链接中,作者说: 当心:在C ++中,看起来像结构的类可能会违反此规则!(它们是否取决于基类和虚拟成员函数的实现方式,并随编译器的不同而不同。) 本文主要讨论结构,但是局部变量声明是否也受此需求影响? 您是否知道内存对齐在C ++中如何工作,因为它似乎有些差异? 前一个问题包含“对齐”一词,但未提供上述问题的任何答案。

5
在嵌入式系统中为单个阵列分配大量堆栈有缺点吗?
我通常可以毫无疑问地确定某些数据是全局的,静态的还是在堆栈上(这里没有动态分配,因此不使用堆)。我也看过几个Q / A如这一个,但我的问题是更具体的,因为它涉及到比较系统内存中的数据,庞大的数额巨大。 我正在尝试改进的现有代码(设计,可能出现的问题,性能等)。该代码在只有4KB RAM的旧8位MCU上运行。在这段代码中,我将使用几乎1KB的数组(是的,在4KB RAM系统上为1KB)。使用此数组的每个字节,这不是问题。问题在于此数组是文件在其中声明的静态数组,因此其生命周期与程序之一相同(即可以视为无限)。 但是,在阅读了代码之后,我才发现该数组不需要无限的生命周期,它是以完全过程性的方式构建和处理的,因此我们应该只能在使用它的函数中声明它,这样,它将在堆栈上,因此我们将节省此1KB RAM。 现在的问题是:这是个好主意吗?从设计的角度来看,如果不需要无限/全局生命周期,则它属于堆栈。但是,嘿,这是4KB中的1KB,这样分配25%的RAM是否没有任何缺点?(可能是堆栈的50%或更多) 有人可以在这种情况下分享经验吗,还是有人在考虑是否有任何合理的理由不将此数组放在堆栈中?我正在寻找技术缺陷以及对设计的评论。 我唯一意识到的是,进入此功能时,我必须确保实际上有1KB的可用堆栈。也许这就是我必须采取的所有措施,也许不是。

4
为什么不在C#中使用非托管安全代码
C#中有一个选项可以执行未经检查的代码。通常不建议这样做,因为托管代码更加安全并且可以解决很多问题。 但是我想知道,如果您确定您的代码不会引起错误,并且您知道如何处理内存,那为什么(如果您喜欢快速代码)遵循一般建议? 我想知道这一点,因为我编写了一个用于摄像机的程序,该程序需要非常快速的位图处理。我自己制作了一些快速的图形算法,并且使用非托管代码在位图上效果很好。 现在,我通常会怀疑,如果您确定没有内存泄漏或崩溃的风险,为什么不更频繁地使用非托管代码? PS我的背景:我有点涉足这个编程领域,而且我一个人工作(我从事了几年),所以我希望这个软件设计问题不会那么奇怪。我真的没有其他人像老师那样问这些事情。

1
如何改善应用程序的内存使用率?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我正在编写一个C#应用程序,并且可以看到随着应用程序运行时间的增加,内存使用量也在增加。 有什么工具或技术可以监视我的应用程序的内存使用,识别内存泄漏并总体上改善我的应用程序的内存使用?
10 c#  memory-usage 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.