- 博客(10)
- 收藏
- 关注
原创 模n的快速指数运算
不难发现,属于同一模n剩余类的数,乘任意一整数时,所得结果模n都相同。由乘法的交换律,我们可以发现更为广泛的规律:分别属于同一模n剩余类的两个数相乘所得的结果对n取模都相同。先用较为直白简单的方式实现模n的指数运算(以a为底数,b为指数,模n)现在,幂已经降为1,让底数1和乘数3相乘,结果模4,得到最后结果为3。模n,从而在不影响结果的情况下降低运算复杂度;首先,根据带余除法,对给定的任意正整数。为奇数,先将乘数乘底数,同时模n,使幂。,在每次进行指数运算时,可以先将底数。相乘,结果模n,得到最终结果。
2023-09-08 21:13:48
3174
1
原创 3DES加密算法实现
则3DES将执行单重DES加密,这样有利于实现时的兼容性,确保某些遗留的难以更新的应用能继续使用单重DES加密。如有错误和不足之处,敬请指正。形式1的优点在于,如果。
2023-09-02 22:03:50
558
1
原创 glibc源码中weak_alias宏及其含义
此时由于STRONG宏的屏蔽作用,main.c源文件中的func函数没有参与编译,因此链接时选用func.c中的弱符号func。__cpoy__(arg) 起到的作用就是将函数的属性拷贝,所以__attribute_copy__(arg)起到的作用就是拷贝函数的属性。此时STRONG宏中的代码被打开,main.c源文件中的func函数参与了编译,因此链接时选用main.c中的强符号func。,它是gcc编译器的C语言拓展,当它作用于函数名时,会替代为函数的类型,包括返回值类型和参数类型。
2023-07-25 12:13:17
684
原创 GCC编译器函数属性声明之__attribute__((weak))
在func.c中,func()函数被修饰为了weak类型,而在main.c中的func()函数是strong类型。受制于STRONG宏,main.c中的func()不会被编译,所以链接时采用func.c中的弱符号。显然,是main.c中的强符号func覆盖了func.c中的弱符号。弱符号是指在程序中定义,但其地址可以被其他同名符号覆盖的符号。,子类继承后,可以对父类中的虚函数重写,重新提供一种实现。相结合,给函数起一个别名的同时,声明为弱符号。,与弱符号相对应的是强符号。另一个常见的应用场景,是和。
2023-07-24 21:06:33
549
原创 GCC编译器函数属性声明之__attribute__((alias (“target“)))
alias 属性导致函数声明将会作为另一个符号(函数)的别名被“触发”,该符号(函数)之前必须使用相同的类型进行声明,对于函数的参数,也必须具有相同的大小和对齐方式。如果a库的1.0.0版本是这种方式实现的,那么想要达到更改函数首字母为大写这个需求,需要修改源代码中相关部分,然后重新编译,发布1.0.1版本。至于为什么不是每个软件都各自维护一个静态库,这是考虑到实际情况,有些库的体积是相当大的,而且分开不好维护。首先可以想到的解决方案是,将源代码中函数名修改,重新编译静态库a,然后替换交付。
2023-07-24 16:09:46
584
原创 GCC编译器函数属性声明__attribute__((attribute-list))
在 GNU C 和 C++ 中,您可以使用函数属性来指定某些函数属性,这些属性可能有助于编译器优化调用或更仔细地检查代码的正确性。例如,您可以使用属性来指定函数从不返回 (noreturn)、仅根据其参数的值返回一个值 (const),或者具有 printf 样式的参数 (format)。使用函数属性声明时,需要用到关键字 __attribute__ ,它的格式如下: 其中的attribute-list内容,可以在gcc.gnu.org官方网站上找到详细的描述,欢迎各位读者阅读我个人解析的attribute
2023-06-14 22:51:05
292
1
原创 GCC编译器-c编译指令解析
非常常见的场景是,有的项目需要用到链接库,可能是静态链接库或动态链接库,而链接库生成时,就需要将源代码编译到目标文件阶段,然后将目标文件打包为链接库,这样其他程序就可以使用该库文件提供的函数或符号。这里的原因比较复杂,起初我认为是程序中使用了printf函数,因此去掉了printf函数,只是return 0,但这样产生的main.o文件依旧无法执行。crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,对于一般应用程序,这些启动是必需的。
2023-06-12 23:19:11
1767
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人