Xlinker和syscall
虽然Xlinker和syscall两种没关系,但最近在工作中一起碰到了,琢磨了半天。 下面以笔试题的形式先考考读者:
1. 自己实现一组内存分配和释放函数。
要求能够替代之前的alloc/free/memalign函数。要求:
- 不修改原始代码,只替换库;
- debug 版本的时候,调用自己开发的库
- release 版本,用标志库
2. 在应用程序如何调用底层的系统调用接口。
要求在应用程序直接调用系统调用,来提高性能。
3. 提示
3.1 问题1的提示
-
代码中可以通过typeof 定义新函数和之前的malloc/free函数接口和类型一致;
-
GCC链接选择中可以通过 -Xlinker --wrap=malloc 指定链接到想要的库
-
GCC链接选择中可以通过-Xlinker --undefined=__wrap_malloc忽略没有定义的函数;
-Xlinker --wrap=malloc -Xlinker --undefined=wrap_malloc -Xlinker --wrap=free -
Xlinker --undefined=__wrap_free -Xlinker --wrap=memalign -Xlinker --undefined=wrap_memalign -lpthread -laio -lfuse`
3.2 问题2的提示
头文件:
#include <sys/syscall.h>
部分关键代码:
#define UTEX_WAIT 0
#define UTEX_WAKE 1
#define utex(...) syscall(SYS_utex, ##__VA_ARGS__)
ret = utex(&cond->signalledCnt, UTEX_WAKE, 1, NULL, NULL, 0);
本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/2055976 ,如需转载请自行联系原作者