- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是 strace -T -ttt -ff -x -y -o pid.trace -p 2145
的输出。跟踪如下。
1503431273.934716 semop(1204093022, {{0, 1, SEM_UNDO}}, 1) = 0 <0.000004>1503431273.934737 clock_gettime(CLOCK_REALTIME, {1503431273, 934741536}) = 0 <0.000004>1503431273.934763 write(6</home/red/samples/debug/hexa.debug>, "17.08.23 01:17:53 [ hexa:2145"..., 79) = 79 <0.000016>1503431273.934960 brk(0) = 0x1adc000 <0.000004>1503431273.934974 brk(0x1afd000) = 0x1afd000 <0.000006>1503431273.934994 brk(0) = 0x1afd000 <0.000003>1503431273.935006 brk(0) = 0x1afd000 <0.000004>1503431273.935017 brk(0x1afc000) = 0x1afc000 <0.000008>1503431273.935033 brk(0) = 0x1afc000 <0.000003>1503431273.935045 brk(0) = 0x1afc000 <0.000004>1503431273.935057 brk(0) = 0x1afc000 <0.000004>1503431273.935068 brk(0x1afb000) = 0x1afb000 <0.000005>1503431273.935080 brk(0) = 0x1afb000 <0.000003>1503431291.010338 brk(0) = 0x1afb000 <0.000006>1503431291.010366 brk(0x1b1c000) = 0x1b1c000 <0.000006>1503431291.010391 brk(0) = 0x1b1c000 <0.000003>1503431291.010403 brk(0) = 0x1b1c000 <0.000004>1503431291.010414 brk(0x1b12000) = 0x1b12000 <0.000008>1503431291.010430 brk(0) = 0x1b12000 <0.000004>1503431291.010443 brk(0) = 0x1b12000 <0.000004>1503431291.010455 brk(0) = 0x1b12000 <0.000003>1503431291.010466 brk(0x1b11000) = 0x1b11000 <0.000004>1503431291.010478 brk(0) = 0x1b11000 <0.000004>1503431301.277050 clock_gettime(CLOCK_REALTIME, {1503431301, 277067441}) = 0 <0.000005>1503431301.277094 write(6</home/red/samples/debug/hexa.debug>, "17.08.23 01:18:21 [ hexa:2145"..., 91) = 91 <0.000019>1503431301.277201 clock_gettime(CLOCK_REALTIME, {1503431301, 277216542}) = 0 <0.000005>1503431301.277234 write(6</home/red/samples/debug/hexa.debug>, "17.08.23 01:18:21 [ hexa:2145"..., 126) = 126 <0.000018>1503431301.277296 clock_gettime(CLOCK_REALTIME, {1503431301, 277301142}) = 0 <0.000004>1503431301.277317 write(6</home/red/samples/debug/hexa.debug>, "17.08.23 01:18:21 [ hexa:2145"..., 126) = 126 <0.000012>1503431301.288030 clock_gettime(CLOCK_REALTIME, {1503431301, 288037704}) = 0 <0.000004>
如果您在两个 brk(0)s(请参阅 1503431273.935080 和 1503431291.010478)处查看上面的轨迹,花费了太多时间,分别约为 17 秒和 10 秒 (比较左侧时间)。但右侧的执行时间非常短。我已经在同一个 Redhat Linux box (7.2) 中多次运行该程序,所有运行都在相同的系统调用位置 (brk(0)) 给出相同的计时(微秒差异)。
可能是什么问题?它是在编程级别还是操作系统级别?我没有这方面的源代码,但我知道这是一个 c/c++ 程序。
最佳答案
回答标题中的问题:No, brk(0)
不会花费太多时间。
您可以通过查看为系统调用本身报告的时间( <0.000003>
,由 -T
选项添加)来了解这一点。这只有 3 微秒。
左边的值是(绝对)时间戳。但这仅仅意味着进程执行了一个 brk
1503431273.935080 的系统调用和 1503431291.010338 的另一个系统调用。这并不意味着任何单个系统调用都需要 17 秒;这只是意味着进程到达下一个系统调用需要 17 秒。
该进程可能一直在做许多其他事情,例如进行原始计算(消耗 CPU)或未被调度(因为系统正忙于其他程序)。诚然,后一种选择不太可能,因为您说过这发生在程序的多次运行中。因此,我认为最可能的解释是,代码只是花费大量时间进行计算而不需要调用内核(例如,循环中的紧凑数字代码,没有内存分配)。
关于c++ - brk(0) 是否花费了太多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846961/
自从升级 NodeJs 以来,我从 Visual Studio 2017 运行 Nodejs 时遇到此错误。 断点也不起作用。有任何解决这个问题的方法吗? 注意:VS版本是15.5.6NodeJS 版
我已经使用 VS 2015 在我的计算机上安装了 nodeJs 并进行了设置。当我尝试运行示例 hello world 应用程序时,它抛出以下错误: verb(node:14096) [DEP0062
当我在 Visual Studio 中运行 Node.js 应用程序时,我收到以下消息:DeprecationWarning: 'node --debug' 和 'node --debug-brk'
根据Linux程序员手册: brk() and sbrk() change the location of the program break, whichdefines the end of the
据我所知,在 brk() 系统调用之后,额外的虚拟内存尚未分配(即页表尚未增长以容纳新的虚拟地址)。我的印象是这些页表被添加为 那么...为什么您需要 brk() 系统调用?为什么内核不能在内存访问进
这是 strace -T -ttt -ff -x -y -o pid.trace -p 2145 的输出。跟踪如下。 1503431273.934716 semop(1204093022, {{0,
我写了一个基本的自定义内存管理分配器,它会获取一 block 内存,预先创建 X 对象,这样每当我需要“创建”一个对象时,我就可以获取一个预先创建的对象并简单地分配数据成员(内存已经分配)。 我使用了
我正在尝试将内存动态分配到堆中,然后在这些内存地址中分配值。我了解如何分配内存,但我如何将例如寄存器中的值分配给第一个动态内存地址? 这是我到目前为止: push rbp mov rb
我正在尝试将内存动态分配到堆中,然后在这些内存地址中分配值。我了解如何分配内存,但我如何将寄存器中的值分配给第一个动态内存地址?这是我目前所拥有的: push rbp mov rbp,
我想知道在内核源代码版本 >= 2.6 中定义了 brk。那是哪个c文件包含它的定义? grep 并没有透露太多。另外 sbrk 是在 glibc 中实现的吗? 最佳答案 它在 mmap.c 中。寻找
我正在尝试在 NASM/x86 程序集中使用 sys_brk 分配一些内存。 sys_break返回break的新地址,这是数据段的末尾,对吧?那么我新分配的内存驻留在哪里?我假设它位于旧中断值和新中
不使用brk是否可以实现malloc库函数?我可以使用 sbrk(0) 找出程序中断的当前位置,然后使用 sbrk(size) 对其进行递增吗? 如果是,那么为什么首先要添加 brk? 最佳答案 br
有人可以解释为什么这个“无休止的”循环会很快出现段错误吗?例如,假设我们有这个功能: #!/bin/bash foo() { foo }; foo 8-10 秒后出现段错误。通过 strace 检
我在很多地方(musl 邮件列表、macOS 论坛等)听说 brk() 和 sbrk() 是不安全的。这些地方很多要么根本不解释,要么解释的很模糊。例如,this链接指出“这些功能从根本上被破坏了”,
虽然我知道 Unix 系统调用 brk 和函数 sbrk 的作用,但我不知道它们代表什么。谁能赐教一下? 最佳答案 它来自于“破值”。 我引用:“更改是通过重置进程的中断值并分配适当的空间量来进行的。
我是新手,任何人都可以通过一个简短的例子说出 brk 和 sbrk 之间的确切区别吗?有没有效率因素可以从两者中选择任何一个?malloc 和 new 内部调用 brk 或 sbrk。 最佳答案 in
我编写了一个小的 hello world 程序,并在其二进制文件上运行 strace,它列出了所有在我的 Hello_world 程序执行过程中调用的系统调用。 strace ./a.out exec
我发现并研究了x86 memory access segmentation fault它在我的代码中不起作用。区别可能在于我不使用单独的 .text 和 .data 段,而是通过创建自定义 ELF h
我正在尝试通过简单的脚本使用 Node 检查器。我有一些控制台日志,因此我可以判断它是否正在运行。我尝试了两种方法: Node 调试 test.js 通过这种方法,调试器在 Chrome 中打开,但不
我正在使用 Node v6.10.0 并试图弄清楚为什么我的 --debug-brk 如此缓慢。如果没有此标志(仅使用 --inspect 或 --debug),它几乎是瞬时的,尽管调试器仍然需要很长
我是一名优秀的程序员,十分优秀!