- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我 strace
时:
#include <stdio.h>
#include <time.h>
int main()
{
struct timespec ts;
fprintf(stderr, "start!\n");
clock_gettime(CLOCK_REALTIME, &ts);
fprintf(stderr, "realtime %lu %lu\n", ts.tv_sec, ts.tv_nsec);
clock_gettime(CLOCK_MONOTONIC, &ts);
fprintf(stderr, "monotonic %lu %lu\n", ts.tv_sec, ts.tv_nsec);
return 0;
}
我明白了:
execve("/tmp/x", ["/tmp/x"], [/* 72 vars */]) = 0
brk(NULL) = 0x13d0000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9a0d1000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=126501, ...}) = 0
mmap(NULL, 126501, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fed9a0b2000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fed99ae5000
mprotect(0x7fed99ca5000, 2093056, PROT_NONE) = 0
mmap(0x7fed99ea4000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7fed99ea4000
mmap(0x7fed99eaa000, 14848, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fed99eaa000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9a0b1000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9a0b0000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed9a0af000
arch_prctl(ARCH_SET_FS, 0x7fed9a0b0700) = 0
mprotect(0x7fed99ea4000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ) = 0
mprotect(0x7fed9a0d3000, 4096, PROT_READ) = 0
munmap(0x7fed9a0b2000, 126501) = 0
write(2, "start!\n", 7start!
) = 7
write(2, "realtime 1488919932 97097045\n", 29realtime 1488919932 97097045
) = 29
write(2, "monotonic 258985 170149836\n", 27monotonic 258985 170149836
) = 27
exit_group(0) = ?
+++ exited with 0 +++
在生成 CLOCK_REALTIME
或 CLOCK_MONOTONIC
值时似乎没有系统调用。这是如何实现的?我试图在汇编程序中逐步完成它,但我一定没有注意到关键部分,因为我无法弄清楚它是如何完成的。
最佳答案
这是一个虚拟系统调用。也就是说,调用它不需要切换到内核模式——它在用户模式下执行以提高性能。如果您曾经想知道 linux-vdso.so.1
在 ldd
输出中的含义,那么这些虚拟系统调用就是在其中实现的。您可以了解更多here .
关于linux - clock_gettime 是如何在 linux 上实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42658125/
当我尝试获取 ns 时间时,我在内核为 2.6.18 的 Linux 中遇到了问题,如下所示: #include #include #include int main(void) { s
我在我的 Mac 上用 C 来做基准测试。此处的代码可以编译并运行,但输出中会出现大约 1Hz 的故障。该程序“应该”每 2 毫秒中断一次,并报告上次中断时间的数据。默认设置是打印以下内容到终端 ev
我在 Linux 2.6 上使用 clock_gettime()(来自 time.h)来控制线程循环中的计时。我需要在 +/- 5mS 时间范围内有 500mS。它似乎给了我 500 毫秒,然后开始漂
我有一个在linux上运行的非常简单的代码,如下所示: struct timespec SysTime_Test; #define BILLION 1000000000L SysTime_Test.
我正在运行一个进行长时间计算的 Haskell 程序。经过一些分析和跟踪后,我注意到以下内容: $ /usr/bin/time -v ./hl test.hl 9000045000050000 Com
我正在尝试获取 Ubuntu 上进程消耗的 CPU 时间。据我所知,有两个函数可以完成这项工作:getrusage() 和 clock_gettime(CLOCK_PROCESS_CPUTIME_ID
我试图测量一段代码的时间,并注意到当我从我的编辑器 QtCreator 中运行程序时,与我从 gnome 终端中启动的 bash shell 运行它时相比,时间快了大约 50ns。我使用 Ubuntu
我在多线程代码中使用 timespec 结构 - 一个线程调用 clock_gettime()填充全局 timespec 结构,另一个 - 读取该结构。问题:是clock_gettime()调用原子还
我正在编写一个简单的程序,它检查耗时是否超过 1 秒。我使用clock_gettime()获取开始时间,然后调用sleep(5),获取新时间并检查差异是否大于1;我睡了 5 秒,那么它应该大于 5,但
我正在尝试使用 clock_gettime 函数获取以下代码的运行时间。但是,当我运行代码时,每次运行时我都会收到 0.0000 的时间。我也分别输出了开始和停止时间,我收到了完全相同的答案。 str
当使用下面的示例代码时,我认为 tv_nsec 值是循环的,因为它只是一个long; #include using namespace std; #include int main(int arg
我阅读了以下手册: http://linux.die.net/man/3/clock_gettime 然后我写了下面的代码: #include int main() { struct tim
Linux 中的 clock_gettime 函数在调用以测量给定代码段的运行时间时,内部使用哪个系统硬件计时器将纳秒级分辨率返回给用户代码? 最佳答案 现代 CPU 以几 GHz 时钟频率运行。 1
clock_gettime 不再适用于 MacOS Sierra。很确定在 Xcode 8 出来之前我已经正确地编译了这个。我真的很困惑如何才能让它正确编译。 #include #include
我正在尝试使用 clock_gettime 函数,但无法弄清楚所需的 header 是什么(或者如果这不是 header 的问题,我做错了什么)。这是我的代码: #include #include
我想用 clock_gettime 测量挂钟时间,但每次运行我的代码时,它都显示 0。这是为什么? (我希望我的结果以毫秒为单位。) #include #include #include #in
我正在编写一个简单的程序,用于检查耗时是否超过 1 秒。我使用 clock_gettime() 获取开始时间,然后调用 sleep(5),获取新时间并检查差异是否大于 1;我睡了 5 秒,那么它应该大
我在我的 C++ 程序中使用 clock_gettime() 来获取当前时间。但是,返回值是自 UTC 纪元以来的秒数。在夏令时期间,当时间偏移一小时时,此代码在我的时区可能会搞砸。 系统本身有 NT
我想要以微秒为单位的当前系统时间,所以我使用 clock_gettime 编写了一个程序,但它有时会返回负值。有人可以帮我解决这个问题吗? int main(void) { struct ti
我正在尝试用这个类分析一个程序: namespace smtx{ class CPerformance_clock { timespec t1; tim
我是一名优秀的程序员,十分优秀!