我想知道,运行游戏时RAM会很高,到90%,请问这种状况下是不是需要加内存条呢?我现在的内存是2G。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想知道,运行游戏时RAM会很高,到90%,请问这种状况下是不是需要加内存条呢?我现在的内存是2G。相关的知识,希望对你有一定的参考价值。
哥们,ram是运行内存,rom是储存空间(手机自带的),另外内存卡相当于电脑硬盘,这个ram是没关系的,你加100g内存,ram也上不去,手机设计的时候都定死了容量了,目前最高规格ram的手机,也只不过是1g而已,包括双核或者传说中的的四核,ram也是1g,这个你可以去查询的,另外你用有是安卓系统吗?此系统基于linux开发的,特别便是智能分配ram,当ram不足的时候会自动关闭不常用或者不重要的后台,另外有些后台你看着它是在运行,其它它只是在潜伏,不真正占有用ram,只是便于下次启动它的时候能更迅速追问拜托,我指的是电脑的RAM,手机貌似没有到了2G那么大的内存的吧。
追答晕,不好意思,我没看分类,只看了题目,以为是手机咧。不打扰哈,你继续。。。。
参考技术A 不需要,一般游戏时RAM占用都很高,如果提示内存不足,请增加虚拟内存。 参考技术B 不好意思 现在才看到你的提问 如果你玩的游戏 是特别大型的话 内存耗到90% 不足为奇 只要你玩游戏的时候 不卡 就没什么问题了 基本可以忽略的了本回答被提问者采纳如何在 ARM 架构上从 RAM 运行代码
【中文标题】如何在 ARM 架构上从 RAM 运行代码【英文标题】:How to run code from RAM on ARM architecture 【发布时间】:2013-02-14 17:49:59 【问题描述】:我正在编写一个 ARM Cortex-R4,我有一些二进制文件,我想从 TCRAM 执行它们,只是为了看看性能的提升是否足够好。
我知道我必须编写一个函数来将二进制文件复制到 RAM(这可以通过链接描述文件完成,并且知道二进制文件的大小)。但是他们会怎么跑呢?
想象一下:第一个二进制文件有 func1()、func2()、func3() 和 func4()。我将整个模块复制到 TCRAM,我将如何在那里调用函数?我必须使用指向该特定函数的函数指针吗?如果 func4() 调用 func2() 和 func3() 会怎样?如果我没记错的话,他们会指向闪存中的一段代码。这是否意味着我必须重新编写那些函数?完全使用函数指针?有人告诉我,仅链接描述文件就足以完成所有这些工作,我无需担心任何事情,但我仍然不明白它是如何工作的。
【问题讨论】:
【参考方案1】:在 GCC 上:只需将函数放在 .data 部分:
__attribute__( ( section(".data") ) )
它将被启动代码与您初始化的其余变量一起复制(无需弄乱链接器脚本)。如果函数在放入 RAM 后与其余代码“相距甚远”,您可能还需要一个“long_call”选项。
__attribute__( ( long_call, section(".data") ) )
例子:
__attribute__( ( long_call, section(".data") ) ) void ram_foobar (void) ...
您可能会收到可以安全忽略的编译器警告:
Warning: ignoring changed section attributes for .data
【讨论】:
这很有用,但我认为它不会按照 OP 的要求将该功能放入 TCRAM 中。这将以一种相当简单的方式将函数放入 ram 中,但效率不高,并且根据例程大小,它实际上可能比从闪存执行要慢(由于调用开销)。因此,这仅取决于 为什么 您需要将数据放入 RAM(不是 TCRAM 根据 OP)才有用;例如 SMC。 添加noinline
属性也可能很有用,以确保代码不会内联到另一个从闪存运行的函数中。【参考方案2】:
你有两个选择。
-
按照你的建议复制它们,用
pc relative
编译。
使用具有不同加载/运行地址的链接器文件。
仅当例程不使用任何绝对地址时,一个简单的副本才有效。如果他们确实使用 绝对地址 可能没问题,因为我猜你会在标准 RAM 中留下一份副本。但是,这可能无法充分利用TCM
。
使用链接器脚本,您可以指定不同的LOAD
和RUN
位置。
sections
.text *(.text); >FLASH
.tcm
*(.tcm);
>TCM_MEM AT>FLASH
.data *(.data); > RAM
.bss : NOLOAD *(.bss); > RAM
特别注意AT>FLASH
。
另请参阅:gnu linker map file... 以及 *** 上的更多内容。 Gnu Ld manual 包含有关 LMA
部分的信息(LOAD 地址)。您的LMA
将是flash,但VMA
(RUN 地址)将是TCM。上面的手动链接还显示了如何复制。 RAM
、FLASH
和 TCM_MEM
使用 ld MEMORY 信息定义,具体取决于您的板的地址。所有这些都将记录在MAP
文件中。请务必生成一个MAP
文件并检查地址以仔细检查您的ld
脚本。
第二种情况也需要一份副本(在启动时或至少在第一次使用TCM
函数之前)。但是,编译器可以使用绝对地址,它们将位于TCM
内存中。此外,主DRAM
中的任何函数都可以直接调用TCM
函数。对于第一种情况,您必须使用函数指针来调用TCM
代码。如果您希望将全局变量放置在此内存中,可以使用属性将它们放置在不同的部分中,并使用 gnu ld 适当放置它们。我认为有ITCM
和DTCM
?所以也许这不适合你,或者你需要两个部分。
链接描述文件更通用,如果您将复杂的功能放在TCM
中,效果最好。仅使用-fpic
等并进行复制可能会使事情快速运转,尤其是在您只有一个pure
函数的情况下。
【讨论】:
【参考方案3】:现在(当时也是?)您可以只使用宏 __RAM_FUNC
、__RAMFUNC_EXT(bank, name)
或 __RAMFUNC(bank)
【讨论】:
非标准 C。在 IAR 中支持,而不是 GCC。以上是关于我想知道,运行游戏时RAM会很高,到90%,请问这种状况下是不是需要加内存条呢?我现在的内存是2G。的主要内容,如果未能解决你的问题,请参考以下文章
STM32 KEIL C如何在RAM中调试FREERTOS?
根据 CPU 和 RAM 使用情况调整线程池的 Java Executor