zoukankan      html  css  js  c++  java
  • vector个人理解

    无锁的vector是LockFreeVector
    内部是二维数组,类型是AtomicReferenceArray类型。
    第一维的数组大小是30,第二维第一个大小是8,第二个大小是16,所以整个二维数组的大小是整体之和,大概80亿。
    看了《实战java高并发程序设计》中关于push_back的介绍,
    要注意数组大小和数组存储位置的区别。比如第一个数组的大小是8,二进制是1000,而数组的存储是从0000-0111的。
    但是每次看其实还是会懵逼,最主要的是抓住两点,数据存储需要定位两点,即一维数组中的位置和二维数组中的位置。
    一维数组中的位置,因为每个二维数组的大小都是8的倍数,因此在定位是,只要加上8即可知道。此处是通过前导零的个数来算的,而此处就要注意刚才说的储存大小和存储位置的点
    二维数组的位置,就算的脑洞就有点大了,主要是下面两句实现的
    //desc.size 目前数组的大小
    //FIRST_BUCKET_SIZE 值为8
    int pos = desc.size + FIRST_BUCKET_SIZE;
    //zeroNumPos 是前导零的个数
    //^ 这个是异或运算, 0^1=1
    int idx = (0x80000000 >>> zeroNumPos ) ^ pos;
    idx就是二维数组中的位置
    此处就是脑洞处,比如初始大小是0,存入第一个数时,pos就是8,而通过异或计算idx的值就是0,即在0的位置存储的第一个数据。

  • 相关阅读:
    笛卡尔积
    Oracle语句以及各种知识点
    vue和angular的区别:
    vue的生命周期的理解
    使用递归实现一个数组的快速排序
    对css盒模型的理解
    对 超链接 的理解
    HTML语义化的理解
    HTML 、XHTML、H5的区别:
    mysql的使用相关问题
  • 原文地址:https://www.cnblogs.com/tianphone/p/10966102.html
Copyright © 2011-2022 走看看