76得票9回答
比memset更快的清零内存的方法?

我了解到 memset(ptr, 0, nbytes) 非常快,但是有没有更快的方法(至少在x86上)? 我假设 memset 使用 mov,但是当清零内存时,大多数编译器使用 xor,因为它更快,对吗?编辑1:错误的,正如GregS指出的那样,这只适用于寄存器。我在想什么呢? 另外,我请...

74得票2回答
如何使用libc的调试版本

问题简述: 我如何让gdb使用libc的调试符号? 详细描述: 我正在使用gdb调试一个程序,并希望查看有关libc使用的futex的信息。但是,在调试过程中,我会得到以下输出:Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e i...

59得票5回答
“calloc”中的第一个“c”代表什么?

一位学生提出了这个问题,我不确定答案。 猜测包括:“计算”,“清除”,“分块”,“完成”等。 标准库文档没有解释它所代表的含义,也没有类似命名的函数能够指示模式。是否有人知道实际词源并可能有权威参考资料支持?

58得票3回答
39得票5回答
我应该释放/删除由getenv()返回的char *吗?

char * val; val = getenv("ENV_VAR_NAME"); 上面是获取环境变量的代码,如果我不释放由getenv(char...

33得票2回答
C++中是否保留了C标准库的符号?

这是对另一个问题的后续。 原问题存在其他问题,但我不得不意识到主要问题(根据CLang)是在仅使用好的C++包含文件的情况下将time重新定义为另一个符号。 因此,这里有一个简化版本:#include<iostream> using std::cout; using std::e...

32得票3回答
如何在Linux上重新实现(或包装)系统调用函数?

假设我想完全接管open()系统调用,可能是为了包装实际的syscall并执行一些日志记录。 一种方法是使用LD_PRELOAD 加载一个(用户制作的)共享对象库,以接管open()入口点。 用户制作的open()例程然后通过dlsym()获取指向glibc函数open()的指针,并调用它。...

31得票6回答
我在哪里可以在线浏览libc的源代码(例如doxygen)?

有时我想查找stdlib函数的实现,我已经下载了源代码,但是它非常混乱。仅仅用grep不太适合,因为有太多匹配结果。是否有人知道一个像doxygen风格一样的网页文档?Linux内核也是同样的情况。谢谢。

31得票4回答
在Windows系统下,MSVCRT是否类似于*nix系统下的glibc(libc)?

我经常遇到一些Windows程序将MSVCRT(或其更当前身份)与程序可执行文件捆绑在一起。在典型的PC上,我会发现许多相同的.dll文件。我的理解是,MSVCRT是C运行时库,类似于*nix下的glibc/libc.so。 为什么Windows程序必须携带它们的C库,而不能共享系统范围内的l...

30得票2回答
为什么execvp函数的argv参数不是const类型?

execvp的定义如下:int execvp(const char *file, char *const argv[]); 这就排除了像下面这样的代码被使用:const char* argv[] = {"/bin/my", "command", "here", NULL}; execvp(ar...