Questions tagged «memory»

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

4
什么是CPU寄存器?
这个问题已经困扰了我一段时间,今天我想我会谷歌搜索它。我已经阅读了一些有关它的内容,它看起来与我一直称为处理器缓存的内容非常相似。 两者之间有区别吗?或者当我认为它们相同时我是对的吗?寄存器实际上是否必须位于CPU内部才能正常工作? 根据维基百科,寄存器是CPU中的一个位置,可以在将其发送回RAM之前快速访问和修改内存。我是否理解这是错误的,还是缓存和寄存器实际上相同?

3
为什么long int在某些计算机上占用12个字节?
在我的机器上编译以下代码后,我发现了一些奇怪的事情: #include <stdio.h> int main() { printf("Hello, World!\n"); int a,b,c,d; int e,f,g; long int h; printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x", &a,&b,&c,&d,&e,&f,&g,&h); return 0; } 结果如下。注意,每个int地址之间有4个字节的差异。但是,在最后一个int和长整数之间有12个字节的差异: Hello, World! The addresses are: da54dcac da54dca8 da54dca4 da54dca0 da54dc9c da54dc98 da54dc94 …
26 c  memory  pointers 

5
是否可以通过分配系统上的所有空白空间来从另一个程序读取内存?
从理论上讲,如果我要构建一个程序来分配系统上所有未使用的内存,并继续请求越来越多的内存,因为其他应用程序释放了它们不再需要的内存,则可以从另一个应用程序读取最近释放的内存?还是受到现代操作系统的某种保护? 我对此没有实际应用,我只是很好奇。我意识到现实生活中分配“所有可用内存”存在一些问题。 编辑:为澄清起见,我专门询问“已释放”内存,而不访问其他应用程序当前分配的内存。

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

7
垃圾回收的演示比手动内存管理更快
我已经在很多地方读取(赫克,我甚至写了那么我自己),垃圾回收可能(理论上)比手工内存管理更快。 但是,展示要比讲讲难得多。 我从未真正看到过任何代码可以证明这种效果。 是否有人拥有(或知道在哪里可以找到)证明这种性能优势的代码?

5
调试内存损坏
首先,我确实意识到这不是一个具有绝对答案的完美的问与答风格的问题,但是我想不出任何措辞来使它更好地工作。我认为没有绝对的解决方案,这就是为什么我将其发布在此处而不是Stack Overflow的原因之一。 在过去的一个月中,我一直在重写相当旧的服务器代码(mmorpg),以使其更加现代,并且易于扩展/修改。我从网络部分开始,并实现了一个第三方库(libevent)来为我处理事务。通过所有的重构和代码更改,我在某个地方引入了内存损坏,而我一直在努力寻找发生错误的地方。 我似乎无法在我的开发/测试环境中可靠地重现它,即使实现原始机器人来模拟某些负载时,我也不会再崩溃(我修复了会导致某些问题的libevent问题) 到目前为止,我已经尝试过: 摆脱困境-直到事情崩溃(可能需要1天以上的生产时间或仅仅一个小时)崩溃之前,我才真正感到困惑,这之前肯定没有无效的写入,肯定在某个时候它将访问无效的内存并且不会覆盖内容机会?(是否可以“扩展”地址范围?) 代码分析工具,即coverage和cppcheck。尽管他们确实指出了代码中的一些.nastiness和边缘情况,但没有什么严重的。 记录该过程,直到它与gdb崩溃(通过undodb),然后以反向方式工作。/ sounds /这样的声音应该是可行的,但是我要么通过使用自动完成功能最终导致gdb崩溃,要么由于一些可能的分支(一个损坏导致另一个损坏,因此导致内部迷失)在内部libevent结构中丢失上)。我想如果能看到指针最初属于/分配指针的地方,那将消除大多数分支问题,那就太好了。但是我无法使用undodb运行valgrind,而且我正常的gdb记录的速度实在太慢了(如果甚至可以与valgrind结合使用)。 代码审查!我自己(彻底)并让一些朋友来检查我的代码,尽管我怀疑它是否足够彻底。我当时在考虑也许要雇用一名开发人员与我一起进行一些代码审查/调试,但是我付不起太多钱,而且我也不知道该去哪里寻找愿意为小工作而工作的人-如果他没有找到问题或根本没有资格,那就不要钱。 我还应该指出:我通常会得到一致的回溯。在某些地方发生崩溃,主要与套接字类以某种方式损坏有关。它是指向不是套接字的东西的无效指针,还是套接字类本身被乱码覆盖(部分?)。尽管我怀疑它在那里崩溃最多,因为那是最常用的部分之一,因此它是第一个被使用的损坏的内存。 总而言之,这个问题使我忙了将近2个月(无论是开还是关,都是一个业余项目),这确实让我感到沮丧,以至于我变得脾气暴躁,并想放弃。我只是想不出我应该怎么做才能发现问题。 我错过了任何有用的技术吗?你怎么处理那件事呢?(这可能不那么普遍,因为没有太多相关信息。或者我真的是盲人?) 编辑: 一些重要的规格: 通过gcc 4.7使用c ++(11)(版本由debian wheezy提供) 代码库大约有15万行 编辑以回复david.pfx帖子:(抱歉响应缓慢) 您是否在仔细记录崩溃情况以寻找模式? 是的,我仍然遗漏了最近发生的崩溃事件 几个地方真的很相似吗?用什么方式? 好吧,在最新版本中(每当我添加/删除代码或更改相关结构时,它们似乎都会改变),它总是会陷入项目计时器方法中。基本上,一个项目有一个特定的时间,在该时间之后,它会过期,并将更新的信息发送给客户端。无效的套接字指针将在Player类中(据我所知仍然有效),大部分与此有关。在正常关闭后,我还将在清理阶段遇到大量崩溃,该崩溃将破坏所有未明确破坏的静态类(__run_exit_handlers在回溯中)。大多数情况下只涉及std::map一个类,但猜测这只是第一件事。 损坏的数据是什么样的?零?Ascii?模式? 我还没有找到任何模式,对我来说似乎有点随机。很难说,因为我不知道腐败从哪里开始。 它与堆有关吗? 这完全与堆有关(我启用了gcc的堆栈保护,但没有捕获任何东西)。 腐败发生在a之后free()吗? 您将不得不对此进行详细说明。您是说要让已经释放的对象指向周围吗?一旦对象被销毁,我会将每个引用都设置为null,所以除非我在某处错过了东西,否则不行。那应该在valgrind中显示出来,但是没有。 网络流量是否有与众不同的东西(缓冲区大小,恢复周期)? 网络流量由原始数据组成。因此,对于更复杂的事物,使用char数组,(u)intX_t或packed(以除去填充)结构,每个数据包都有一个标头,该标头由id和数据包大小本身组成,并针对预期大小进行了验证。它们大约为10-60字节,最大的(内部“启动”数据包,在启动时触发一次)大小为几Mb。 大量的生产断言。在损坏蔓延之前及早地发生崩溃。 我曾经有一次与std::map腐败相关的崩溃,每个实体都有其“视图”的地图,每个实体都可以看到它,反之亦然。我在前面和后面添加了200byte的缓冲区,将其填充为0x33,并在每次访问之前对其进行了检查。腐败刚刚消失了,我必须搬走一些东西使它腐败了。 战略性日志记录,因此您可以准确地知道之前发生了什么。当您更接近答案时,将其添加到日志记录中。 它的工作..扩展。 无奈之下,您可以保存状态并自动重启吗?我可以想到一些实现此目的的生产软件。 我有点做。该软件由一个主要的“高速缓存”进程和一些其他工作进程组成,它们均访问高速缓存以获取并保存内容。因此,每次崩溃我都不会失去太多进展,它仍然会断开所有用户的连接,依此类推,这绝对不是解决方案。 并发:线程,竞争条件等 有一个mysql线程可以执行“异步”查询,尽管这一切都未曾动过,并且仅通过具有所有锁定功能的函数才与数据库类共享信息。 中断 有一个中断计时器可以阻止它锁定,如果它在30秒内没有完成一个周期,它只会中止运行,但是该代码应该是安全的: if (!tics) { abort(); } else …
23 c++  debugging  memory 

5
IIS为什么默认为每1740分钟回收一次应用程序池?
为什么IIS在给定时间后默认默认回收应用程序池?除了大多数Web应用程序可能不谨慎管理内存外,还有其他特定原因吗?鉴于您正在正确管理应用程序的内存,可以安全地将其关闭吗?关闭回收或继续回收有哪些潜在的不利方面和向上的好处?
22 asp.net  memory  iis 

2
操作系统如何限制堆栈和堆的大小?
注意:如果您需要考虑特定的操作系统才能回答问题,请考虑使用Linux。 每当我运行一个程序时,都将为其分配一个虚拟内存空间,其中有一个用于堆栈的区域,一个用于堆栈的区域。 问题1:堆栈和堆是否有静态大小限制(例如,每个大小为2 GB),还是该限制是动态的,根据程序执行期间的内存分配而变化(即,总共4 GB供用户使用)两者兼而有之,因此,如果程序仅使用堆栈,那么它将能够具有4 GB的堆栈)? 问题2:如何定义限制?它是总可用RAM内存吗? 问题3:文本(代码)和数据部分如何处理,如何限制它们?
21 linux  memory  stack  heap 

3
在不填满巨大数组的情况下产生大问题的专业方法:C ++,从数组的一部分释放内存
我正在开发物理模拟,由于我对编程还不熟悉,因此在生成大型程序时会遇到很多问题(主要是内存问题)。我知道动态内存分配和删除(新建/删除等),但是我需要一种更好的方法来构造程序。 假设我正在模拟一个实验,该实验运行了几天,并且采样率非常高。我需要模拟十亿个样本,然后运行它们。 作为一个超级简化的版本,我们将说一个程序采用电压V [i],并将它们加在一起为5: 即NewV [0] = V [0] + V [1] + V [2] + V [3] + V [4] 然后NewV [1] = V [1] + V [2] + V [3] + V [4] + V [5] 然后NewV [2] = V [2] + V [3] + V [4] + …
20 c++  data  memory  array  dynamic 

5
他们如何在受保护的内存之前调试分段错误?
现在,当我用C中的指针犯了一个编程错误时,我遇到了一个很好的分段错误,程序崩溃了,调试器甚至可以告诉我哪里出错了。 在没有内存保护的情况下,他们是如何做到的?我可以看到一个DOS程序员在弄错时摆弄着他,并使整个操作系统崩溃。虚拟化不可用,因此他所能做的就是重新启动并重试。真的那样吗?

2
谁能解释浮点数在内存中的表示?
当我阅读上一个问题时,这不是重复的问题。 谁能帮助我理解how float values are stored in the memory。 我的疑问是浮点值包含' .'(for example 3.45)'.'在内存中将如何表示? 有人可以用图表说明我吗?

4
修复内存泄漏有多重要?
我通过Valgring发现某些GTK +程序会泄漏内存。修复这些泄漏有多重要?我的意思是,这些程序通常运行良好,但另一方面,人们永远无法确定是否要将部分泄漏的代码复制到其他程序中。而且我不确定GTK +程序的构想是否可以快速运行,是否存在泄漏。 因此,如果有时在开放源代码程序中发现内存泄漏,是否应该修复它或存在效率问题,因此程序员的初衷是编写一些小的泄漏代码?
19 c  memory 

5
多个CPU /内核可以同时访问同一RAM吗?
我猜这是会发生的: 如果两个内核试图访问RAM中的相同地址,则一个内核必须等待另一个内核访问RAM。在第二时间,每个核心将尝试访问相同的地址,他们仍然可能有RAM缓存,这样他们就可以访问各自的同时缓存。 如果两个内核试图访问同一RAM中的不同地址,则一个内核必须等待另一个内核访问RAM。 换句话说,我想对于RAM密集型编程任务来说,多处理将无济于事,除非它涉及每个内核多次从RAM中的同一地址读取数据。 那么,多个CPU /内核可以同时访问同一个RAM,还是我所说的正确?

6
24位术语
是否有24位(3字节)整数的术语? 我知道少见位计数(如“蚕食”或“半字节”的4位)有名字,并具有视频和音频技术,24位,例如,是很常见的。

3
创建对象时,是将新的内存分配给实例字段和方法,还是仅分配给实例字段
我有一个下课 class Student{ int rollNumber; int marks; public void setResult(int rollNumber, int marks){ this.rollNumber=rollNumber; this.marks=marks; } public void displayResult(){ System.out.println("Roll Number= "+this.rollNumber+" Marks= "+this.marks); } } 现在,我创建两个类型为Student的对象,如下所示 Student s1=new Student(); Student s2=new Student(); 现在,为实例字段分配了两组不同的内存。现在我的问题是为方法(setResult和displayResult)分配内存两次还是一次? 请参见下图,您能帮我说一下哪个图提供了正确的信息。

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.