Questions tagged «memory»

使用此标签进行内存管理或编程问题。有关内存硬件问题或通用软件中的错误的问题,请访问https://superuser.com或https://serverfault.com(如果这与企业级硬件或软件有关)。


12
C内存管理
我一直听说,在C语言中,您必须真正观察如何管理内存。而且我仍然开始学习C,但是到目前为止,我根本不需要做任何内存管理相关的活动。.我一直想像必须释放变量并做各种丑陋的事情。但这似乎并非如此。 有人可以通过代码示例向我展示您何时需要执行“内存管理”的示例?
90 c  memory 

8
Python比C ++更快更轻吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直认为Python的优势在于代码的可读性和开发速度,但是时间和内存使用却不如C ++。 这些统计数据让我非常震惊。 您的经验告诉您关于Python与C ++的时间和内存使用情况?

4
为什么memmove比memcpy快?
我正在研究某个应用程序中的性能热点,该应用程序将其50%的时间都花在memmove(3)上。该应用程序将数百万个4字节的整数插入已排序的数组中,并使用memmove将数据“右移”,以便为插入的值腾出空间。 我的期望是复制内存的速度非常快,而令我惊讶的是花了这么多时间在记忆体上。但是后来我想到memmove速度很慢,因为它移动的是重叠区域,必须在一个紧密的循环中实现它,而不是复制大内存页。我写了一个小型的微基准测试,以找出memcpy和memmove之间的性能差异,期望memcpy能够胜任。 我在两台机器(核心i5,核心i7)上运行了基准测试,发现memmove实际上比memcpy快,在较旧的i7核心上甚至快两倍。现在,我正在寻找解释。 这是我的基准。它使用memcpy复制100 mb,然后使用memmove复制大约100 mb;源和目标重叠。尝试了源和目的地的各种“距离”。每次测试运行10次,平均时间被打印出来。 https://gist.github.com/cruppstahl/78a57cdf937bca3d062c 以下是Core i5(Linux 3.5.0-54-通用#81〜precise1-Ubuntu SMP x86_64 GNU / Linux)上的结果,gcc为4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)。括号中的数字为源与目标之间的距离(间隙大小): memcpy 0.0140074 memmove (002) 0.0106168 memmove (004) 0.01065 memmove (008) 0.0107917 memmove (016) 0.0107319 memmove (032) 0.0106724 memmove (064) 0.0106821 memmove (128) 0.0110633 Memmove被实现为SSE优化的汇编代码,从后到前复制。它使用硬件预取将数据加载到缓存中,然后将128个字节复制到XMM寄存器中,然后将其存储在目标位置。 (memcpy-ssse3-back.S,行1650 ff) L(gobble_ll_loop): prefetchnta -0x1c0(%rsi) prefetchnta -0x280(%rsi) prefetchnta …
89 c++  c  performance  memory 


13
该程序如何工作?
#include <stdio.h> int main() { float a = 1234.5f; printf("%d\n", a); return 0; } 它显示一个0!! 那怎么可能?这是什么原因? 我故意%d在printf声明中加入,以研究的行为printf。
88 c++  c  memory  printf  endianness 

17
有效地计算文本文件的行数。(200mb +)
我刚刚发现我的脚本给了我一个致命错误: Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 440 bytes) in C:\process_txt.php on line 109 那行是这样的: $lines = count(file($path)) - 1; 因此,我认为将文件加载到内存中并计算行数有困难,有没有一种更有效的方法可以在没有内存问题的情况下执行此操作? 我需要计算的行数从2MB到500MB的文本文件。有时候也许是演出。 谢谢大家的帮助。

14
堆栈会向上还是向下生长?
我在c中有这段代码: int q = 10; int s = 5; int a[3]; printf("Address of a: %d\n", (int)a); printf("Address of a[1]: %d\n", (int)&a[1]); printf("Address of a[2]: %d\n", (int)&a[2]); printf("Address of q: %d\n", (int)&q); printf("Address of s: %d\n", (int)&s); 输出为: Address of a: 2293584 Address of a[1]: 2293588 Address of a[2]: 2293592 Address …
88 c  memory  stack 

15
您如何获得计算机具有的RAM总量?
使用C#,我想获取计算机拥有的RAM总量。使用PerformanceCounter,我可以通过设置以下内容来获得可用内存的数量: counter.CategoryName = "Memory"; counter.Countername = "Available MBytes"; 但是我似乎找不到找到总内存量的方法。我将如何去做呢? 更新: MagicKat:我在搜索时看到了,但没有用-“您是否缺少程序集或参考?”。我已经将其添加到参考文献中,但在那儿看不到它。

3
了解Linux oom-killer的日志
我的应用被oom-killer杀死了。它是在没有交换的实时USB上运行的Ubuntu 11.10,并且PC具有1 Gig的RAM。唯一运行的应用程序(不是所有内置的Ubuntu东西)是我的程序flasherav。请注意,/ tmp是内存映射的文件,崩溃时大约有200MB的文件(因此占用了约200MB的RAM)。 我正在尝试了解如何分析om-killer日志,以便我可以了解确切地在哪里使用了所有内存,即,哪些不同的块加起来会导致〜1 gig,从而导致oom-killer踢了在?了解这一点后,我便可以减少违规者的使用,以便该应用程序可以在内存为1 GB的计算机上运行。我的具体问题是。 为了尝试分析这种情况,我总结了“ total_vm”列,我只得到609342KB(在/ tmp中添加到200MB时仍然只有809MB)。也许我对“ total_vm”列的理解是错误的-它是否包括已分配但未使用的内存以及共享内存。如果是,那么它应该不会高估实际使用的内存(因此我不应该没有内存不足),对吗?是否还有其他正在使用的内存块未在下面的列表中说明? [11686.040460] flasherav invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0 [11686.040467] flasherav cpuset=/ mems_allowed=0 [11686.040472] Pid: 2859, comm: flasherav Not tainted 3.0.0-12-generic #20-Ubuntu [11686.040476] Call Trace: [11686.040488] [<c10e1c15>] dump_header.isra.7+0x85/0xc0 [11686.040493] [<c10e1e6c>] oom_kill_process+0x5c/0x80 [11686.040498] [<c10e225f>] out_of_memory+0xbf/0x1d0 [11686.040503] [<c10e6123>] __alloc_pages_nodemask+0x6c3/0x6e0 [11686.040509] [<c10e78d3>] ? …




7
VS2015 Update 2消息:“检测到内存不足。该解决方案无法进行完整的解决方案分析。”
我刚刚用Update 2更新了Visual Studio 2015。 现在,经过数小时的正常工作,我收到:“检测到内存不足。为此解决方案禁用了完整的解决方案分析。” 出现在我的VS2015编辑器固定面板的顶部。 我看到Microsoft Connect上报告了一个错误。 笔记: 我正在使用Resharper。 我的解决方案很大,其中约有32个项目。 如果有人对解决方法有任何解决方法或建议,请告诉我。 更新:我和安德斯·佛斯格伦(第一条评论)的感受差不多。对我来说,这听起来很不错。 更新2(2016-04-20)最近(三天前),我对Framework.Net安装的软件包(来自“程序和功能”)进行了大幅度的清理,其中删除了约20-30个软件包。有些是俄语的。我还重新安装了Visual Studio和ReSharper。所有这些似乎都为我的环境增加了一些稳定性(更少的冻结或不再冻结->时间会证明一切)。此外,最近还发布了新的(2016-04-19).NET Framework修复工具版本。也许可以帮助解决我们遇到的一些问题(如果有的话)? 更新3经过一些测试并阅读了一些国家的文字。似乎它与.Net framework本身或Resharper没有关系。它似乎与VS2015本身有关,可能与Roslyn有关。我没有成功从VS2015中删除Roslyn / CodeAnalysis,它似乎是必不可少的部分。听起来我们必须等待Microsoft修复程序才能拥有稳定的环境。 更新4(2016-04-26)请参阅John Atwood答案。很多信息。我刚刚开始测试其答案。Update 3应该可以解决此问题(如果有???)。 更新5(2016-04-26 + 6小时)在VS自身完成1次重启,一个令人难以置信的缓慢性以及一条消息“ Low memory ...”之后,我可以确认禁用完全解决方案分析不能解决问题,在至少在我的机器上。我目前不知道可以在我的计算机上使用的任何修复/解决方法。 Update 6(2016-06-15) Mladen Mihajlovic叫醒了我。我只是意识到我忘了透露VS2015 Update 3 RC的可用性(请注意,我认为这是第二个版本:Update 3 RC2)。自6月7日起在MSDN上可用,RC1 = 14.0.25401.00,而RC2 = 14.0.25402.00。听起来要稳定得多(我强烈推荐)。

10
在Java中如何在位级别内部表示整数?
我试图了解Java如何在内部存储整数。我知道所有Java基本整数都是带符号的(短符号除外?)。这意味着该字节的字节数少了一位。 我的问题是,是否所有整数(正数和负数)都存储为二进制补码,或者仅是负数在二进制补码中? 我看到规格说明了x bit two's complement number。但是我经常感到困惑。 例如: int x = 15; // Stored as binary as is? 00000000 00000000 00000000 00001111? int y = -22; // Stored as two complemented value? 11111111 11111111 11111111 11101010 编辑 要清楚一点 x = 15 In binary as is: `00000000 00000000 00000000 00001111' Two's …

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.