Tag: libc

当我提供自己的malloc并且免费时,为什么我没有收到链接错误?

我正在尝试实现一个简单的第一个内存管理算法。 所以我有一个自己的C文件 void* malloc(size_t) 和 void free(void*) 使用gcc生成.out文件时,我期待链接错误,因为它会与现有的标准实现冲突。 但我的文件链接很好。 请帮我理解。

由于标准C委员会没有标准化gets()的简单替换,它应该是什么?

gets函数首先在C99中弃用,最后在C11中删除。 然而,在C库中没有直接替代它。 fgets()不是替代品,因为它不会删除最后的’\n’ ,这可能在文件末尾不存在。 许多程序员也错了。 有一个单行删除换行符: buf[strcspn(buf, “\n”)] = ‘\0’; ,但这是非常重要的,往往需要解释。 它也可能是低效的。 这会适得其反。 许多初学者仍然使用gets()因为他们的老师很蹩脚或他们的教程已经过时了。 微软提出了gets_s()和许多相关的函数,但是它并没有默默地截断超长行,这种约束违规的行为并不是很简单。 BSD和GNU libc都有getline ,在POSIX中标准化,通过realloc分配或重新分配缓冲区… 教初学者关于这个烂摊子的最佳方法是什么?

嵌入式系统的小型libc

我正在寻找一个用于嵌入式使用ARM7微控制器上的freertos的小型libc。 我看过newlib,但它对我的需求来说太复杂了。 Newlib在许多函数(例如printf())中调用malloc(),这对小型嵌入式实时系统不利。 有谁知道一个适合我的应用程序的小型,可移植的开源libc实现?

libc如何提供两个名称的函数?

在直接绑定(-B direct)出现之前,libc提供了许多具有两个名称的函数。 例如,getpwent()和_getpwent()。 这两个名称在libc中引用了完全相同的function。 libc如何使两个函数名指向同一个实现? 我认为它不应该像写两次相同的代码那么容易。

posix regcomp和regexec线程是否安全? 具体来说,在GNU libc上?

这里有两个独立的问题:我可以在没有锁定的multithreading程序中使用正则表达式,如果是这样,我可以在多个线程中同时使用相同的regex_t吗? 我无法在Google或联机帮助页上找到答案。

失败的malloc()的unit testing

unit testing涉及失败的malloc()代码路径的最佳方法是什么? 在大多数情况下,它可能并不重要,因为你正在做类似的事情 thingy *my_thingy = malloc(sizeof(thingy)); if (my_thingy == NULL) { fprintf(stderr, “We’re so screwed!\n”); exit(EXIT_FAILURE); } 但在某些情况下,除了死亡之外你还有其他选择,因为你已经为缓存或其他任何东西分配了一些额外的东西,你可以收回那些记忆。 但是,在那些您可以尝试从失败的malloc()中恢复的情况下,您在代码路径中执行的操作非常棘手且容易出错,这使得测试变得尤为重要。 你是怎么做到这一点的?

有没有可以使用libc中的函数fma的情况?

我遇到这个页面 ,发现有一个奇怪的浮动乘法加法函数fmaf和fmaf 。 它说结果是这样的: (x * y) + z #fma(x,y,z) 并且值是无限精度并且对结果格式进行一次舍入 。 然而,AFAICT我以前从未见过这样的三元手术。 所以我想知道这个function的cumstom用法是什么。

为什么time(time_t *)函数都返回并设置by-ref?

我一直很好奇,为什么time(time_t *)函数都返回time_t ,并设置传入指针的时间? 返回时间的示例: time_t myTime = time(NULL); printf(“The time is now %s”, ctime(&myTime)); 将值设置为指针的示例: time_t myTime; time(&myTime); printf(“The time is now %s”, ctime(&myTime)); 我原本以为通过写入内存而不是返回会有性能提升,但是如果它必须同时执行这两种操作,那不就是让它变慢吗?

为什么最大负整数-2147483648的绝对值仍然是-2147483648?

abs(-2147483648)的结果是-2147483648,不是吗? 这似乎是不可接受的。 printf(“abs(-2147483648): %d\n”, abs(-2147483648)); 输出: abs(-2147483648): -2147483648

获取C中的时区GMT偏移量

我正在使用标准的mktime函数将struct tm转换为纪元时间值。 tm字段在本地填充,我需要将纪元时间作为GMT。 tm有一个gmtoff字段,允许您为此目的设置本地GMT偏移量(以秒为单位)。 但我无法弄清楚如何获取这些信息。 当然必须有某个标准函数返回偏移量? localtime如何做到这一点?