美文网首页
关于malloc_usable_size

关于malloc_usable_size

作者: fanbo | 来源:发表于2017-01-06 16:48 被阅读0次

最近想自己实现一个c版本的处理字符串的系列函数,为了得到heap上申请的char *的实际分配内存查阅了一些资料,最终发现malloc_usable_size符合我的要求,从http://www.man7.org/linux/man-pages/man3/malloc_usable_size.3.html 可以得到malloc_usable_size的解释:

malloc_usable_size - obtain size of block of memory allocated from heap

真是完美啊,这个函数!于是乎我写出了下面这样的函数!

typedef char * cstring;

#define NULL_PTR_ERROR \
printf("allocate memory error.\n" ); \
exit(1);

cstring
new_cstring_with_size(size_t n) {
    cstring s = malloc((n + 1) * sizeof(char));
    memset(s, 0, n + 1);
    if(!s) {
        printf("new_cstring_with_size: ");
        NULL_PTR_ERROR
    }
    return s;
}

size_t
cstring_size(cstring s) {
    // 实际上有这么多空间可以用
    return malloc_usable_size(s) - 1;
}

然后测试这两个函数:

cstring s = new_cstring_with_size(128);
size_t t = cstring_size(s);
printf("%zu\n", t);

然后结果就出现"异常"!哈哈,喜闻乐见!输出一直是135,而不是127。纳闷归纳闷,问题还是得解决,所以又开始了查阅资料,最终在这里http://manpages.ubuntu.com/manpages/precise/man3/mallopt.3.html 找到了解释:

malloc_usable_size() returns the number of bytes available in the dynamically allocated buffer ptr, which may be greater than the requested size (but is guaranteed to be at least as large, if the request was successful). Typically, you should store the requested allocation size rather than use this function.

也就是说函数的返回值是大于等于你申请的size的。哎!根据typically后的说法,只能设计结构体保存char *的length:

typedef struct {
    size_t size; // 比实际分配的内存少一个字节,即最后一个字节'\0'
    char *str;
}cstring_data;

然后继续实现各种字符串处理的函数吧。。。

相关文章

  • 关于malloc_usable_size

    最近想自己实现一个c版本的处理字符串的系列函数,为了得到heap上申请的char *的实际分配内存查阅了一些资料,...

  • 关于关于关于

    他们爱他们自己,不爱你 他们爱你是他们的母亲妻子女儿姐妹 他们不爱你 直到你死的时候,爱才产生,与遗忘同时 那也不...

  • 光明人生

    关于出生 关于成长 关于求学 关于青春期 关于恋爱 关于择业 关于婚姻 关于养生 关于家庭 关于人际 关于教子 关...

  • 「梦雅的简动力」打卡计时65天

    * 关于人生 * 关于梦想 * 关于方向 * 关于创业 * 关于投资 * 关于成败 * 关于个性 * 关于高度 *...

  • 关于

    关于两个人? 关于100步? 关于回头? 关于深情? 关于家庭? 关于孩子? 关于成长? 关于伤痛? 关于怀抱? ...

  • 2017新手妈妈年终总结

    关于购物 关于体重 关于减肥 关于纪念日 关于生活态度 关于上班 关于职场晋升加薪 关于睡眠 关于抱孩子 关于发型...

  • 2018-11-28

    关于流浪、关于随心、关于自由、关于世俗、关于规则、关于坦诚、关于真我、关于好奇心、关于对这整个世界的态度、关于整个...

  • 一首歌的时间

    认真的 想理出点思绪 关于今天关于明天 关于工作关于梦想 关于冬天关于夜晚 关于阳光关于浪花 关于木马关于窗花 关...

  • 最近的各种关于

    关于运动,关于中文阅读,关于英文听力,关于口算。 关于专注,关于目标,关于举家迁移。 关于对正确的过于执着,关于对...

  • 『关于』

    关于雨落,关于天晴; 关于入夜,关于天明; 关于齐眉,关于耳鬓; 关于缘定,关于今生。 (早安~诸君!)

网友评论

      本文标题:关于malloc_usable_size

      本文链接:https://www.haomeiwen.com/subject/mbcxbttx.html