前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高级语言底层基础知识

高级语言底层基础知识

作者头像
用户2825413
发布2019-07-16 10:57:57
4600
发布2019-07-16 10:57:57
举报
文章被收录于专栏:呆呆熊的技术路

这两天收集了一些基础知识, 记录下

内存管理

通常使用 内存对齐方式 (8 字节、16 字节、32 字节),

有的值可能只占用两个字节,但是为什么还要一次性分配8字节呢.

原因是为了内存的可复用性, 产生更少的内存碎片.

new(9) 大于8, 将会使用16字节内存。

但是仔细想想, 8字节 16字节等等过于零散,可以再对内存进行归类组织, 就使用到了 页 的概念。

垃圾回收

1. 引用计数

每个对象拥有一个ref属性,标记引用的次数。

缺点

有可能造成循环引用,内存无法释放

增一减一 各种环境下要求准确记录, 如果出现不正确计数, 将会引发严重问题

优点

速度快

补偿措施

单独gc算法定期扫描引用链表,进行释放

2. 标记清理

最典型为三色标记法(golang)

3. 代龄

根据对象的生命周期, 标记为 0 1 2 三级代龄, 具体参考 java、C#

进程、线程、协程

1. 进程

操作系统分配存储资源的最小单元

2. 线程

程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位(所以一个进程最少一个线程)

3. 协程

在用户空间实现多任务的调度而多任务调度是发生在一个线程上的,我们把这种机制称之为协程, 因为在一个线程上,协程的本质是串行的。

上下文切换

cpu进程的切换最消耗性能了, 因为整个进程都得保存现场或者恢复现场

线程的切换因为同进程内共享地址空间, 切换相比进程开销要小得多

core文件gdb调试

软件崩溃后会产生core文件, 默认linux没有开启

代码语言:javascript
复制
ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1418
virtual memory          (kbytes, -v) unlimited

开启命令:

代码语言:javascript
复制
ulimit -c unlimited  #unlimited表示不限制大小

如果想要永久生效,可以“ulimit -c unlimited”这一行加到 /etc/profile 文件中去,放到这个文件最后一行即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 呆呆熊的技术路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内存管理
  • 垃圾回收
    • 1. 引用计数
      • 缺点
      • 优点
      • 补偿措施
    • 2. 标记清理
      • 3. 代龄
      • 进程、线程、协程
        • 1. 进程
          • 2. 线程
            • 3. 协程
            • 上下文切换
            • core文件gdb调试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档