考你一下Xlinker和syscall

Xlinker和syscall

虽然Xlinker和syscall两种没关系,但最近在工作中一起碰到了,琢磨了半天。 下面以笔试题的形式先考考读者:

1. 自己实现一组内存分配和释放函数。

要求能够替代之前的alloc/free/memalign函数。要求:

  • 不修改原始代码,只替换库;
  • debug 版本的时候,调用自己开发的库
  • release 版本,用标志库

2. 在应用程序如何调用底层的系统调用接口。

要求在应用程序直接调用系统调用,来提高性能。

3. 提示

3.1 问题1的提示

  1. 代码中可以通过typeof 定义新函数和之前的malloc/free函数接口和类型一致;

  2. GCC链接选择中可以通过 -Xlinker --wrap=malloc 指定链接到想要的库

  3. 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 ,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值