- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在学习 C 的同时做一些实验,我遇到了一些奇怪的事情。这是我的程序:
int main(void) {sleep(5);}
当它被编译时,可执行文件的文件大小为 8496 字节(与 26 字节的源代码相比!)这是可以理解的,因为调用了 sleep 并且在可执行文件中写入了调用指令。另一点是没有 sleep ,可执行文件变成 4312 字节。
int main(void) {}
我的主要问题是当第一个程序运行时会发生什么。我使用 clang 编译和 Mac OS X 运行它。结果(根据事件监视器)是程序使用了 504KB 的“真实内存”。为什么程序只有 4KB 就这么大?我假设可执行文件已加载到内存中,但除了 sleep 调用之外我没有做任何事情。为什么我的程序需要 500KB 才能休眠 5 秒?
顺便说一句,我使用 sleep 的原因是首先能够捕捉到使用事件监视器正在使用的内存量。
我只是出于好奇而问,干杯!
最佳答案
当你编译一个 C 程序时,它被链接到一个可执行文件中。即使您的程序非常小,它也会链接到 C 运行时,其中将包含一些额外的代码。可能会有一些错误处理,这种错误处理可能会写入控制台,并且此代码可能包含 sprintf
,这会为您的应用程序增加一些占用空间。您可以请求链接器在可执行文件中生成代码映射,以查看实际包含的内容。
此外,可执行文件包含的不仅仅是机器代码。将有各种用于数据和动态链接的表,这将增加可执行文件的大小,也可能会浪费一些空间,因为各个部分都存储在 block 中。
C 运行时将在调用 main
之前初始化,这将导致加载一些代码(例如,通过动态链接到各种操作系统功能)以及为堆分配内存,每个线程的堆栈,可能还有一些静态数据。并非所有这些数据都可能显示为“真实内存”——OS X 上的默认堆栈大小似乎是 8 MB,而您的应用程序使用的仍然比这少得多。
关于c - 最低 504Kb 内存使用量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19356823/
我希望有人能解释为什么我的应用程序在加载时使用不同数量的 RAM。我说的是直接使用 exe 的编译版本。这是一个非常基本的应用程序,在应用程序的启动中没有条件分支。然而,每次我启动它时,RAM 量都在
我有一个 inode 使用率为 100% 的磁盘驱动器(使用 df -i 命令)。但是在大量删除文件后,使用率仍然是 100%。 那么正确的做法是什么? 磁盘空间使用量较少的磁盘驱动器怎么可能有Ino
假设我与分支有一个智能合约,其中每个分支都有不同数量的操作。 if (someCondition) { // do operations costing 10 gas } else { //d
是否有一种工具可以在提交到 NEAR 网络之前估算合约调用将产生多少 gas? 最佳答案 目前最好的估计是用runtime-standalone ,它可以处理交易而不必担心共识/网络。这意味着您可以创
我正在使用最新的 SDK 开发适用于 Windows Azure 的应用程序。 目前我正在使用缓存实现 session 提供程序,但模拟器完全不成比例: 缓存被实现为“非常小的”辅助角色(最大 768
我正在为我的 Logstash RAM 问题寻找答案,因为它几乎是 100%。我为它做了很多搜索,但他们没有为我工作。下面的代码是我的 logstash.conf 文件。我认为它需要一些小改动。 Lo
我已经阅读了这里有关此问题的所有其他问题以及互联网其他地方的许多文章。根据this site ,最大内存使用量遵循以下公式: Max memory = [-Xmx] + [-XX:MaxPermSiz
我需要以编程方式增加 Android 中的 RAM 使用量,以观察它随时间的变化。我该怎么做? 我尝试生成很多自定义对象,但生成后意外地 RAM 使用量减少了...我更改了对象数量、结构等,但没有任何
我们使用带有 MMFiles 存储引擎的 ArangoDB 3.3.14(社区版)来处理相对较大的数据集(备份时会超过 30 GB)。我们使用 ECS 在 Docker 容器内运行它。我们的主机虚拟机
我收到了 Hostgator 发来的一条说明,表明他们限制了我对 MYSQL 的访问,因为我的网站使用了太多资源。 通常,在这种情况下,我只会恢复备份以查看最近的更改是否会产生错误。但是,除了写了一些
我使用 TMimeMess 来解码基于 SMTP 服务器的传入电子邮件在突触上。 我发现用于解码 50MB MIME 消息(带有附件),TMimeMess 使用了 600-800MB 的内存。 在这里
我正在打包适用于 iOS 和 Android 的 Adobe Air 应用程序,并且我的 (RAM) 内存使用量超过 100MB。我的游戏(RPG)中有大量 Assets 。 Assets 的数量
我是一名优秀的程序员,十分优秀!