Articles of c + +

设备内存空间中的cuda程序内核代码

有没有什么办法可以找出在gpu(设备)内存中占用多less内存代码(执行)? 如果我有512 MB的设备内存,我怎么知道有多less可用的分配? 可视化分析器显示这样的信息?

在C中的特定时间执行一个动作

我有一个while循环通过检索每个帧来解码video文件,所以像这样: while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) { … } 现在,一旦检索到框架,就需要在将来的某个时刻(根据框架的时间戳)将其绘制到屏幕上。这怎么能实现呢? 是否有一些方法可以在特定时间设置callback来执行?

什么时候创buildqt窗口?

如果QWidget没有父项创build,它会创build一个窗口。 那么,什么时候创build窗口? 是什么时候show()被调用? 或者当对象被构造?

使用散列函数

我正在用LINUX做我的功课,我有一些关于散列函数的问题。 当我把*mnemonic_nameinput到像'ADD'这样'ADD'string时, find_index在每次编译时都是随机的。 你能解释这个问题并为我解决吗? 这是我的代码: 251 int symtab_finder(char *mnemonic_name) 252 { 253 node *temp; 254 255 int find_index = op_find(mnemonic_name); 256 int find_flag = 0; 257 258 temp = optabl[find_index].head; 259 260 while(temp) 261 { 262 if((strcmp(temp->mnemonic_name,mnemonic_name)==0)) 263 { 264 find_flag = 1; 265 } 266 temp = temp->next; 267 268 } 269 if(find_flag == […]

在使用读写锁的pthread散列表中读取性能差

我已经把一个简单的关键值存储放在一起,它说的是Redis协议的一个子集。 它使用Linux上的pthreads来共享哈希表; 我使用pthreads rwlocks来pipe理对这个表的访问。 我一直在使用Redis基准testing工具testingKV商店。 有了一个客户端,我可以每秒做大约2500次SET操作。 但是,它只能做到每秒25个GET。 我期望别的方法,所以这让我感到惊讶。 它在某种程度上可以扩展,所以如果我扔10个客户端,我会得到每秒近9000个SET和每秒250个GET。 我的GET代码很简单, 我locking表,find合适的散列表位置,并检查链接列表中的匹配键。 对于GET,当我完成时,我使用pthread_rwlock_rdlock和pthread_rwlock_unlock 。 对于SET,我使用pthread_rwlock_wrlock和pthread_rwlock_unlock 。 SET比GET复杂得多。 我还使用共享内存进程和自己的读/写锁实现了Plan 9的代码。 在那里,GET几乎和SET一样快,而不是慢100倍。 这让我觉得我的哈希表代码可能是好的; 我使用两个操作系统完全相同的哈希表代码,我只是使用#defines为每个操作系统select合适的锁(在两种情况下,接口是相同的,幸运的!)。 我对pthreads不是很有经验。 谁能帮我弄清楚为什么我的performance太糟糕了? (注意:这不是一个高性能的KV商店,它是一个天真的书面testing应用程序/基准testing程序,通过为每个客户端分离一个新的线程,以最简单的方法处理请求)

关于LINUX中的分段错误

我正在LINUX里做一个开发SIC / XE汇编程序的作业。 当我编写代码时,我遇到了一些错误,但是我不知道为什么会发生这种情况。 你能为我解释为什么会出现这个问题吗? 下面的代码显示了带有标记的'test.asm'文件。 178 printf("token1: %s \t",token1); 179 printf("token2: %s \t",token2); 180 printf("token3: %s \t",token3); 181 printf("token4: %s \t",token4); 182 printf("ss\nss"); 据此,特别是“ss \ nss”声明,我预计打印结果如下。 sstoken1: LDT token2: LENGTH token3: (null) token4: (null) ss sstoken1: WLOOP token2: TD token3: OUTPUT token4: (null) ss ss 但是,当我运行这个程序到最后,我遇到了分段错误,遇到了奇怪的情况。 sstoken1: OUTPUT token2: BYTE token3: X'05' token4: (null) […]

regcmp模式$ 0的含义

我试图了解regcmp()和regex()工作的。 我的代码是 int main() { char *newcursor, *name; char *string; char ret0[9]; name = regcmp("([A-Za-z][A-za-z0-9]{0,4})$0", (char *)0); printf("name %s\n",&(*name)); newcursor = regex(name, "filter:attrsonly:attrs", ret0); printf("newcursor %s and ret0 %s\n",newcursor,ret0); return 0; } 这里在第12行在模式结尾处的$0是什么([A-Za-z][A-za-z0-9]{0,4})$0是什么意思? 我用LINUX中的regexec()和regcomp()函数replaceregex()和regcmp() ,将代码从UNIX移植到LINUX,因为regcmp()和regex()在LINUX中不存在。 如果我从模式中删除$0 ,它只会在LINUX执行regcomp()时给出预期的结果。 $0是什么意思?

守护进程不与notify-send进行交互

这是我的代码 #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <syslog.h> #include <string.h> #include <iostream> int main(int argc, char *argv[]) { pid_t pid, sid; int sec = 10; pid = fork(); if (pid < 0) { perror("fork"); exit(EXIT_FAILURE); } if (pid > 0) { std::cout << "Running with PID: […]

以非root用户身份调用外部shell脚本失败

我想要一个用户作为B用户做一些工作。 如果B是root,但是非root用户失败,那么可以。 这里是基本的代码: root.c: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid( 0 ); system( "/tmp/script_of_root.sh" ); return 0; } script_of_root.sh: #!/bin/sh echo $RANDOM >> /tmp/file_of_root 回放 : $ cd /tmp $ cc root.c -o root $ su – # chown root.root /tmp/root # chmod 4755 /tmp/root # exit $ ./root […]

如何在不修改程序的情况下通过fork启动一个进程的两个实例

我试图从一开始就从另一个进程中分离出一个进程。 为此,我试图修改glibc中的__libc_start_main函数(我使用了一个修改后的glibc),并试图将fork放在那里,但是无法编译glibc,因为每当我尝试这样做的时候都会报错。 什么是其他选项,为什么在__libc_start_main中插入fork不起作用? 再次注意到我想以一种不需要程序修改的方式来完成,那就是glibc中的修改是可以的,但不是程序。 在__libc_start_main ,我尝试像这样分叉。 if (__builtin_expect (! not_first_call, 1)) { struct pthread *self; fork(); // <– here self = THREAD_SELF; /* Store old info. */ unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf); unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup); /* Store the new cleanup handler info. */ THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf); /* Run the program. */ result […]