Questions tagged «memory»

内存是指用于临时或永久存储程序或数据以在计算机或其他数字电子设备中使用的物理设备。

11
对于一般的系统来说,废除堆栈而仅使用堆进行内存管理会更有效吗?
在我看来,可以用堆栈完成的所有事情都可以用堆来完成,但是不能用堆栈完成的所有事情都可以用堆栈来完成。那是对的吗?然后,为了简单起见,即使我们在某些工作负载下确实损失了少量性能,仅采用一个标准(即堆)难道不是更好吗? 考虑一下模块化和性能之间的权衡。我知道这不是描述这种情况的最佳方法,但是总的来说,即使有可能获得更好的性能,理解和设计的简单性似乎也是一个更好的选择。
14 memory 

3
负号如何存储?
我正在观看有关带符号整数的最大值和最小值的视频。 以带正号的示例为例-0000 0001第一位表示数字为正,而最后7位表示数字本身。因此,很容易将其解释为+1。 现在以负符号值-1000 0000为例,结果为-8。好的,计算机可以理解这是一个负值,因为它的第一个比特,但是它如何理解000 0000表示-8? 通常,负符号值如何在计算机中存储/解释?

2
如果派生类没有分配原始动态内存,为什么基类在这里需要有一个虚拟析构函数?
以下代码导致内存泄漏: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) { vec.push_back(i); } } }; …


3
Foreach循环和变量初始化
这两个版本的代码之间有区别吗? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } 还是编译器不在乎?当我谈到差异时,我指的是性能和内存使用情况。..或基本上没有任何区别,还是编译后两者最终成为相同的代码?
11 c#  performance  memory 

2
Haskell内存效率-哪种方法更好?
我们正在基于修改后的二维语法语法实现矩阵压缩库。现在,我们对数据类型有两种方法-如果使用内存,哪种方法更好?(我们要压缩一些东西;))。 语法包含恰好有4个Productions的NonTerminals或右侧的Terminal。我们将需要Productions的名称来进行相等性检查和语法最小化。 首先: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type for a set of productions type ProductionMap = Map …


3
对于需要大量RAM的应用程序选择C ++还是Java?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我正在考虑的科学应用程序大多受处理器限制,并且堆使用量很大(至少几个GB)。在一年中的任何其他时间,我都会很高兴地使用C ++,但是在这种情况下,我想知道,与Java压缩收集器的优势相比,C ++内存管理器的自然碎片是否会成为一个严重的问题。 有人可以指出与此相关的真实示例吗?
11 java  c++  memory  big-data 

2
是否对编程语言运行时的内存消耗进行了比较研究,并将其与表达能力和生产错误率相关联?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 关于使用一种或多种语言构建的应用程序的运行时性能,有许多比较研究并可以在线获得。有些是由公司推动的,有些是学术的,有些只是个人的实验报告。 在编程语言及其工具的副作用方面,我们也得到了相当多的比较研究,例如: 建立时间 后期发现错误的可能性, 表达能力, 等等... 但是,最近,我对程序的内存消耗感到越来越沮丧,这比其他任何事情都重要。这可能来自以下事实:尽管摩尔定律在我们的工作上表现出色,但我们已经意识到其他瓶颈更为重要。这样,而且我不会经常这样更新硬件,而且我有一些“旧的”(阅读2005-2006 3.6GHz Pentium 4,具有4GB的内存),如今很难被其用于大型应用程序而无需要求我费很大的劲才能从中榨汁(例如,操作系统,UI,服务和守护程序的调整,选择用于任务或其他用途的应用程序...)。老实说,有时我看到最无辜的程序使用的内存时会发火top或procexp哭泣。 我可以通过坚持上述方向来解决这个问题,并且本质上是要限制自己和我使用的程序(出于这个原因,我对cli程序非常热爱,我想),但是我也不得不思考也许我们做错了。 满足现代需求的现代工具 当然,高级语言可以说是更好的选择,并证明它们值得承担沉重的负担。当时,出于很多原因(或合理预期),在许多工具链中做出了一些设计选择。共享的库,内存模型,预处理器,类型系统等。但是使用我们的现代硬件,某些库可能比另一些库更可行,我很想阅读一些对此事的认真研究。 因此,我的问题是,基准游戏和其他游戏是否有侧重于比较语言的基本运行时内存消耗? 甚至更进一步,是否有一些研究将此与其他参数进行交叉引用(类似于本文所做的,例如,对于其他标准,也基于基准博弈)?


11
无限位图
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我想在运行时构建位图。位图应在所有方面都可扩展,像素访问应安静高效。 一些插图http://img546.imageshack.us/img546/4995/maptm.jpg 在图片所示命令之间以及之后,Map.setPixel()和Map.getPixel()应当设置/返回保存在位图中的数据。 我不希望实现只是一个概念,即如何以setPixel()/ getPixel尽可能快的方式分配内存。
10 concepts  memory 

6
线程使用虚拟内存还是实际内存?
我正在尝试优化我的Linux服务器,使其每个进程处理10,000个线程,而现在仅处理382个线程。按照本文的说明,以下公式用于查找可能的总线程: number of threads = total virtual memory / (stack size*1024*1024) 这意味着线程将所有数据存储在虚拟内存中。据我所知,虚拟内存是Linux机器中的交换空间,交换空间存储在硬盘上,而不是RAM或缓存。 所以我的问题是我们的线程是否使用硬盘存储来处理/存储其数据。 如果是,那么这不会影响性能吗?我们可以通过将它们放在RAM或缓存中来提高性能吗?怎么样? 如果否,线程到底如何工作? 更新: 根据无用的回答,虚拟内存是一个大致包括以下内容的系统: 物理内存(RAM) 您附加的所有交换文件 硬件支持,用于在物理内存中不存在虚拟地址时将虚拟地址转换为物理地址并发出页面错误 (内核)软件支持:通过按需从交换中拉入页面来管理该硬件使用的查找表来处理那些页面错误 因此,虚拟内存上的所有内容都集中在RAM(真实内存)和硬盘(交换文件)上。正如詹姆斯在回答中所解释的那样,内核使用诸如LRU之类的算法对Ram与HDD做出了决定。

1
缓存行与内存页之间的关系
如果我是对的,则主存储器中的页面是在主存储器与外部存储设备(例如硬盘)之间传输数据的最小单位。主存储器的缓存行是在主存储器和cpu缓存之间传输数据的最小单位。 我想知道页面大小是否总是或最好是缓存行大小的自然数?如果缓存行大小为64字节,而内存页面大小为4KB,则每个页面中有4KB / 64字节== 64个缓存行。 页面和缓存行都是内存中的固定对象吗?还是它们只是某个大小的连续内存块,可以在内存中的任何位置启动和浮动? 高速缓存行是否总是不能跨越一个以上的页面,也就是说,高速缓存行的一部分在一个页面中,而另一部分在另一个页面中? 谢谢。
9 memory  caching 

5
服务器终止时正确处置对象
我正在从事大型C ++项目。它由公开REST API的服务器组成,为包含许多其他服务器的非常广泛的系统提供了一个简单且用户友好的界面。该代码库很大且很复杂,并且随着时间的流逝而没有适当的设计前期。我的任务是实现新功能并重构/修复旧代码,以使其更稳定,更可靠。 目前,服务器创建了多个长寿命对象,这些对象在进程终止时不会终止或处置。这使得Valgrind几乎无法用于泄漏检测,因为不可能区分成千上万(合法地)合法泄漏与“危险”泄漏。 我的想法是确保在终止之前将所有对象都处置掉,但是当我提出此建议时,我的同事和老板反对我指出操作系统将以任何方式释放内存(这对每个人都是显而易见的)并处置对象将减慢服务器的关闭速度(目前基本上是对的调用std::exit)。我回答说,拥有一个“干净的”关闭程序并不一定意味着必须使用它。如果我们感到不耐烦,我们可以随时致电,也可以std::quick_exit只是kill -9这个过程。 他们回答说:“大多数Linux守护程序和进程都不会在关闭时释放内存”。虽然我可以看到,但确实我们的项目确实需要准确的内存调试,因为我已经发现内存损坏,双重释放和未初始化的变量。 你怎么看?我在追求无意义的努力吗?如果没有,我该如何说服我的同事和老板?如果是这样,为什么,我应该怎么做?
9 c++  debugging  memory 

2
堆栈+堆+静态内存模型是否可以替代?
我见过的所有程序都将其数据存储器组织到一个或多个调用堆栈(通常是固定大小,但有时不是),堆和静态存储器中。最近,线程本地静态存储也已添加到其中。 有没有尝试以根本不同的方式来组织数据存储器布局,例如没有调用堆栈?还是以完成同一件事的另一种方式组织记忆?

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.