0 点赞 评论 收藏
分享
ve2102388688:volatile我理解的是:防止编译器优化,每次都必须从内存中读取。由于寄存器访问速度远快于内存,每次会用寄存器暂存这些变量的值,编译器就从寄存器读取而不是内存
0 点赞 评论 收藏
分享
ve2102388688:关于静态和全局变量:static作为存储类修饰符之一(auto、register、static、extern),其核心在于将链接属性从外部链接改为内部链接,其实也是一种”私有化“的表现。对于全局变量/函数,可以使用extern在其他文件使用,一旦加上static就只能在本文件使用,其实,很多源码都青一色的static关键字,其核心就是限制其他文件使用变量或函数。这时就应该理解为什么叫存储类”修饰符“,核心是修饰功能,改变其属性
0 点赞 评论 收藏
分享
ve2102388688:补充下,动态链接与静态链接:静态链接--将各个模块的obj和库链接成一个完整的可执行程序。优点:运行快、可独立运行。缺点:浪费空间--存在多个副本,因为同一个函数的多次调用会被多次链接进可执行程序、当库、模块修改时,main也需要重编译。动态链接--程序在运行的时候寻找动态库的函数符号(重定位),可以理解成main函数中遇到一个不认识的符号(函数名),就去链接对应的动态库,后序遇到同一个函数,就用之前的。优点:节省空间--相同的函数只有一份、当库、模块修改时,main不需要重编译。缺点:运行较慢(事实上,动态库被广泛使用,这个缺点可以忽略)、不可独立运行。
0 点赞 评论 收藏
分享
ve2102388688:请你说说malloc内存管理原理:这里简谈下malloc的思路,最后放一些参考资料。(1)程序运行的时候会产生堆(stack)区和栈(heap)区,还有一个是文件映射区(Memory Mapping Region--mmap),malloc就是处理heap和mmap。(2)既然分为两部分,代表两种不同的场景,鉴于此,专门有对应的函数进行处理,brk()、sbrk()是增加heap的上界brk;mmap()和munmap()管理mmap区(3)C库进一步封装,对外提供malloc和alloc等函数,这就是为什么这些函数名都不知道,因为malloc进行了封装(4)当申请的内存小于128KB,malloc调用sbrk(),sbrk()是C库函数,进一步调用系统调用brk()(5)当申请的内存大于128KB。 malloc调用mmap ()为什么要再度封装,提供malloc等函数呢? brk()、sbrk()、mmap()和munmap()属于底层调用,如果频繁的调用会严重影响系统的性能。所以由glic帮助程序员管理内存,以内存池为基础的内存分配与回收,即使使用free后,内存也不会立即返回给系统,而是在glic中的内存池里,方便用户的下一次请求。 最后分享下资料,网上大部分关于malloc的底层原理都出自一人的文档,淘宝的--glibc内存管理ptmalloc源代码分析.pdf,原始文档 https://gitee.com/ve2102388688/pdf http://luodw.cc/2016/02/17/malloc/ https://www.cnblogs.com/mysky007/p/12349508.html
0 点赞 评论 收藏
分享
牛客532395288号:这里的p不是指针,变量自身
0 点赞 评论 收藏
分享
蒋豆芽:大家记得订阅专栏。多多点赞,会变好看,多多留言,会变有钱。私聊我送学习资料哦,提供求职解疑
0 点赞 评论 收藏
分享
投递华为等公司10个岗位 >
0 点赞 评论 收藏
分享
玩♂电路:我已经接了4个安慰电话了,现在连OD都没有😅
投递华为等公司10个岗位 >
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
动物园_园长:其实感觉每年都很难,只是理由不同罢了,外加上自己置身于其中,感觉就是今年最难
0 点赞 评论 收藏
分享
offer多多96:不会的,只是也许相等条件下会优先给能提前实习的同学发offer
投递京东等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了: