C
文章平均质量分 52
Damon_X
这个作者很懒,什么都没留下…
展开
-
变长数组(variable-length array)
C语言中,直到C99标准出现之前,声明数组时在方括号内只能使用整数常量表达式。而C99做了很大改进,允许数组的[ ]中的值是整形变量或是整形表达式。这就解释了下面的情况:int n;scanf ("%d", &n);int array[n];虽然n确实是需要运行时动态确定的变量,但是在C99中,以这种变量作为数组大小的形式已经是允许的了。这样的数组就被称之为“变长数组”。注意:变长数组是指用整型变量或表达式声明或定义的数组,而不是说数组的长度会随时变化,变长数组在其生存期内的长原创 2021-08-05 10:10:40 · 1628 阅读 · 0 评论 -
__attribute__(constructor)和__attribute__(destructor)
1、前言最近看代码,看到一个函数前面用__attribute__((constructor))修饰,搜了整个程序,没发现哪个地方调用这个函数。如下:__attribute__((constructor)) void load_file(){ printf("Constructor is called.\n"); g_count = (int *)malloc(sizeof(int));}2、__attribute__介绍__attribute__可以设置函数属性(Fun...转载 2021-05-19 16:22:46 · 210 阅读 · 0 评论 -
内存优化总结:ptmalloc、tcmalloc和jemalloc
概述需求系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。比如nginx, 它在每个连接accept后会malloc一块内存,作为整个连接生命周期内的内存池。 当HTTP请求到达的时候,又会malloc一块当前请求阶段的内存池, 因此对malloc的分配速度有一定的依赖关系。(而apache的内存池是有父子关系的,请求阶段的内存池会和连接阶段的使用相同的分配器,如果连接内存池释放则请求阶段的子内存池也会自动释放)。转载 2021-05-19 11:28:04 · 329 阅读 · 0 评论 -
some code
mine:#include <stdio.h>void bubblesort(int in[], int len){ for(int i = 0; i < len - 1; i++) { for(int j = 0; j < len -1- i; j++) if(in[j] > in[j+1]) { ...转载 2021-05-06 19:04:02 · 140 阅读 · 0 评论 -
#define中#和##的作用
#define f(a,b) a##b#define d(a) #a#define s(a) d(a)void main( void ){ puts(d(f(a,b))); puts(s(f(a,b)));}输出结果:f(a,b)ab分析: ##把两个符号连起来 #a指把a当成符号,就是把#后面的看成字符串# 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串. 例如, 命令 #...转载 2021-01-28 15:44:24 · 2013 阅读 · 0 评论 -
c - 在格式字符串前加下划线_
我在这里查看一些C源代码,发现了这一点:fprintf(stderr, _("Try `%s --help' for more information.\n"), command);最佳答案它来自GNU gettext,这是一个旨在简化国际化过程的软件包。 _()函数只是一个字符串包装器。此功能基本上在运行时将给定的字符串替换为系统语言的译文(如果有的话)(即如果他们在程序中附带了该语言的.mo文件)。...原创 2021-01-15 10:06:50 · 624 阅读 · 0 评论 -
CSAPP第三版运行时打桩Segmentation fault
CSAPP第三版7.13.3节提到了运行时打桩机制,它可以在运行时将程序中对共享库函数的调用进行截获,替换为执行自己的代码。这个机制基于动态链接器的LD_PRELOAD环境变量。如果LD_PRELOAD环境变量被设置为一个共享路径名的列表(以空格或分号分隔),那么当加载和执行一个程序,需要解析未定义的引用时,动态链接器(ld-linux.so)会先搜索LD_PRELOAD库,然后才搜索任何其他的库。有了这个机制,当加载和执行任意可执行文件时,可以对共享库中的任何函数打桩,包括libc.so。书中给出的自己转载 2020-12-22 14:47:28 · 630 阅读 · 1 评论 -
重定位PC相对引用(PC-relative reference relocation)
目录链接符号引用重定位 简介 例子 重定位条目 简介 offset type symbol addend 重定位PC相对引用 重定位PC绝对引用链接符号引用重定位简介我们知道一个.c文件可以被编译为.o文件,即目标文件,而假如一个.c中引用了别的.c中的函数或者是变量,这时候的.o其实是不知道引用函数实际的内存位置的,也就无法跳转,这就需要【重定位】的操作了,而针对函数名(也是符号)的重定位例子我们编写两个.c文件,分别是main.c.转载 2020-12-21 20:06:16 · 1317 阅读 · 0 评论 -
一个编译告警可能导致的严重错误
1 /* foo5.c */2 #include <stdio.h>3 void f(void);45 int y = 15212;6 int x = 15213;78 int main()9 {10 f();11 printf(″x = 0x%x y = 0x%x n″,12 x, y);13 return 0;14 }1 /* bar5.c */2 double x;34 void f()5 {6 x = -0.0;7 }以上两个文件..原创 2020-12-21 18:00:23 · 646 阅读 · 0 评论 -
IEEE754 浮点数的表示方法
原文地址:https://blog.csdn.net/K346K346/article/details/504871271.浮点数的存储格式浮点数(Floating-point Number)是对实数的一种近似表示,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次幂得到。以这种表示法表示的数值,称为浮点数。表示方法类似于基数为10的科学计数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。计算机对浮点数的表示规范遵循电气和电子工程师协会(转载 2020-12-15 17:13:19 · 4018 阅读 · 0 评论