zoukankan      html  css  js  c++  java
  • MySQL源码 数据结构array

      MySQL源码中自己定义了许多数据结构,放在mysys的目录下,源码中通常都使用这些数据结构来组织存放数据,也更容易实现跨平台。

     
    下面先来看下MySQL定义的动态数组:
    【源代码include/array.h  mysys/array.c】
    typedef struct st_dynamic_array
    {
      uchar *buffer;
      ulong elements, max_element;
      ulong alloc_increment;
      uint size_of_element;
    } DYNAMIC_ARRAY;
    特点:
         1. 动态数组中的元素具有固定的内存空间大小 size_of_element
         2. 插入一个元素时,提供元素的指针,写入时会指针所指向的位置开始后的size_of_element字节的内存memcpy到数组中
         3. 检索时,提供单个索引位置的直接定位,或者根据elements来for轮询所有的元素
     
    下面看一下针对动态数组的函数:
         1. init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,

                                void *init_buffer, ulong init_alloc, 
                                ulong alloc_increment)

              初始化elements=max_element=0
              malloc init_alloc*element_size大小的内存空间给array->buffer。
     
         2. insert_dynamic(DYNAMIC_ARRAY *array, uchar* element)
              插入一个元素 element
              如果elements==max_element,则内存空间已经使用完,需要realloc空间,并把原来空间的内存memcpy过来。
              最后追加element到数组的最后
         3. alloc_dynamic(DYNAMIC_ARRAY *array)
              分配一个新的元素空间,并把elements++;
         4. pop_dynamic(DYNAMIC_ARRAY *array)
              弹出数组的最后一个元素,这里只是把elements--即可。
         5. get_dynamic(DYNAMIC_ARRAY *array, uchar* element, ulong idx)
              获取array数组中位置是idx的元素,并把内存copy到element中,所以调用前需要给element分配好空间。
     
         6. delete_dynamic(DYNAMIC_ARRAY *array)
              删除动态数组,并使用my_free把内存释放出来
     
         7. delete_dynamic_element(DYNAMIC_ARRAY *array, ulong idx)
              删除数组中位置是indx的元素,并把indx后面的元素向前移动。
         
         8. get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element)
              获取element在数组中的位置。
  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/xpchild/p/3715569.html
Copyright © 2011-2022 走看看