关于c语言的几点

    技术2026-06-17  13

    1,位运算

    位运算可以实现掩码运算。(linux提取文件的权限)。

    异或运算的特性:与1异或,取相反值,与0异或,取其本身。也可以用异或实现交换,a=a异或b,b=b异或a,a=a异或b,实现交换。

    循环移位:对a循环右移n,b=a<<(32-n), c=a>>n, c=c&~(~0<<n), c=c|b。

     

    2,C99新标准关键字

    inline,用于短小而且需要频繁调用的函数。编译器会自动选择inline所限定的函数时候展开。从而不发生跳转、压栈等操作,提高程序的执行速度。

     

    restrict,表明指针x是指向这块区域的唯一的指针,也就是这块内存区域的唯一入口。在任何时候修改这块内存单元的操作都需要通过指针x才能完成。

     

    3,ELF格式的可重定位目标文件

    .text,代码段

    .rodata,只读数据段,存储复杂常量,比如字符串

    .data,数据段,存储已经被明确初始化的全局数据,包括c语言中的全局变量和静态变量。如果全局变量被初始化为0,则不存储在数据段中,而是存储在块存储段中。

    .bss,块存储段。占位符,以告知指定位置上应当预留全局数据的空间。其存在的原因是为了提高磁盘上存储空间的利用率。

    以上段会在运行是加载到内存中。

     

    .symtab,符号表

    .rel.text,代码段需要重定位的信息

    .rel.data,数据段需要重定位的信息

    .debug,调试信息

    .line,源程序行号映射

    .strtab,字符串表

    以上段都不会出现在运行的程序中,它们都是附加的信息。

     

    4,库

    静态库:在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分来执行。

        gcc -c static_lib.c

        ar rcs static_lib.a static_lib.o

        static_lib.h中申明静态库中的全局变量和函数

        main.c中include"static_lib.h"

        gcc main.c -lstatic_lib.a -o app  -l必须放在被编译的源文件之后

        或者gcc -L.main.c -o app

        或者 gcc main.c -static ./static_lib.a -o app

     

    动态库:在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。

        gcc -shared -fPIC -o share_lib.so share_lib.c

        同样,需要制作一个包含该动态库中全局符号申明的头文件

        gcc main.c ./ static_lib.so -o app

     

    5,gcc工具链

    ar:生成静态库

    as:

    ld:

    nm:查看目标文件中的符号

    objcopy:将原目标文件中的内容复制到新的目标文件中,可以通过不同的选项调整目标文件的格式

    ranlib:为静态库创建索引,相当于ar -s选项

    readelf:

     

     

     

     

     

    最新回复(0)