上一篇:

OpenJDK源码赏析之三:Java命令参数的读取_星空_MAX的博客-CSDN博客

不承接上一篇,这篇单独开始分析jli_util.h(java工具函数)里的一些函数

JLI_MemAlloc

/** Returns a pointer to a block of at least 'size' bytes of memory.* Prints error message and exits if the memory could not be allocated.*/
void *
JLI_MemAlloc(size_t size)
{void *p = malloc(size);if (p == 0) {perror("malloc");exit(1);}return p;
}

可以看到jJLT里面的内存分配实际上用了C语言自带的malloc函数,这里如果分配失败则会输出错误信息,并执行,exit(1)表示异常退出,这个1是返回给操作系统的

关于malloc函数精解,可以看另一篇文章

linux-malloc底层实现原理_mmshixing的博客-CSDN博客_malloc的底层实现

JLT_MemeRealloc

/** Equivalent to realloc(size).* Prints error message and exits if the memory could not be reallocated.*/
void *
JLI_MemRealloc(void *ptr, size_t size)
{void *p = realloc(ptr, size);if (p == 0) {perror("realloc");exit(1);}return p;
}

重新分配内存,也同样是调用C语言的

JLI_StringDup

/** Wrapper over strdup(3C) which prints an error message and exits if memory* could not be allocated.*/
char *
JLI_StringDup(const char *s1)
{char *s = strdup(s1);if (s == NULL) {perror("strdup");exit(1);}return s;
}

strdup可以直接把要复制的内容赋值给没有初始化的指针,因为它会自动分配空间给目的指针

strcpy的目的指针一定是已经分配内存的指针

JLI_MemFree

/** Very equivalent to free(ptr).* Here to maintain pairing with the above routines.*/
void
JLI_MemFree(void *ptr)
{free(ptr);
}

呃,和free一样,官方解释为和上面保持一样

JLI_StrCCmp

int
JLI_StrCCmp(const char *s1, const char* s2)
{return JLI_StrNCmp(s1, s2, JLI_StrLen(s2));
}

在jli_util.h中找到宏定义

#define JLI_StrNCmp(p1, p2, p3) strncmp((p1), (p2), (p3))

将p1函数和p2函数进行比较,比较p3个字节,

p1=p2则等于0,

p1>p2则返回值大于0,

p1<p2则返回值小于0

OpenJDK源码赏析之四(jli_util中的工具函数)相关推荐

  1. OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程

    承接上一谈 OpenJDK源码赏析之一:漫谈java的历史渊源_星空_AZ的博客-CSDN博客 JAVA从启动到第一个函数执行的发生的流程: WinMain->JLI_Launch->JV ...

  2. OpenJDK源码赏析之三:Java命令参数的读取处理流程

    承接上一篇 OpenJDK源码赏析之二:java虚拟机启动流程到首函数调用全流程_星空_AZ的博客-CSDN博客 这篇这要解析Java虚拟机创建时候配置读取时候命令行参数的读取过程,这次采取逆向思维分 ...

  3. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  4. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  5. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  6. commons-math3-3.6.1-org.apache.commons.math3.analysis.differentiation-包下的接口-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.differentiation-包下的接口-中英对照文档及源码赏析 摘要:中英对照文档.源码 ...

  7. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源 ...

  8. eos源码赏析(二十三):默克尔树在EOS中的应用(上)

    前面文章中在分析push_transactioneos源码赏析(二十):EOS智能合约之push_transaction的天龙八"步"以及区块签名eos源码赏析(二十一):EOS智 ...

  9. 转-OpenJDK源码阅读导航跟编译

    OpenJDK源码阅读导航 OpenJDK源码阅读导航 博客分类: Virtual Machine HotSpot VM Java OpenJDK openjdk 这是链接帖.主体内容都在各链接中.  ...

最新文章

  1. 听说,这是时下最恐怖的出游邀请
  2. 前滴滴产品总监刘滢:从这里了解新零售的本质
  3. idea中构造器和toString方法覆写的快捷键
  4. windows下写的脚本,在linux下执行失败
  5. Wireshark数据包分析(一)——使用入门
  6. ipynb文件转为python(.py)文件
  7. 学习笔记--2014年7月7日
  8. 【xshell】xshell 自动换行设置
  9. 周志华教授:长文详细教你如何做研究与写论文?
  10. sysadmin.php,骆驼IPTV源码及搭建教程(只提供源码和安装视频不提供任何技术支持)-396资源...
  11. Java 电阻计算器(一)
  12. 华为电脑安装双系统linux,华为MateBook笔记本安装Win10与Ubuntu双系统
  13. NLP中的主题模型理解
  14. 2022年对于李一男是关键的一年,这也将决定他的社会地位
  15. Mac M1解决mach-o, but wrong architecture
  16. 如何一条命令查询笔记本电池损耗情况-生成报告
  17. android dfu升级
  18. linux环境下安装node
  19. 微信扫描下载提示以及js判断用户手机系统
  20. o.m.s.m.ClassPathMapperScanner : No MyBatis mapper was found in ‘[com.XXX.XXX]‘ pack

热门文章

  1. 智慧城市智能化建设发展现状及展望
  2. BAT批处理如何去写Windows防火墙规则
  3. Siggraph三角网格变形之拉普拉斯变换
  4. java获取微信公众号二维码
  5. SeedLab1: Sniffing Spoofing Lab
  6. Ruby读excel写入mysql
  7. 一本通 1273:货币系统
  8. 解决h5py.h5 ImportError问题
  9. 论文投稿指南——中国(中文EI)期刊推荐(第4期)
  10. mapboxgl地图分屏