技术标签: null list delete 数据结构 crash object
SizeMap初始化完成后,initStaticVars()开始初始化span_allocator_.Init(),并调用两次,主要目的应该是为了能够成功初始化,并保证cache不会存在冲突。;span_allocator_是一个PageHeapAllocator(page_heap_allocator.h)模板的span实例。span_allocator_.Init()函数比较诡异,开始先将几个数据结构初始化,在最后一行调用了New后立即Delete这部分内容非常有意思。
void Init() {
ASSERT(sizeof(T) <= kAllocIncrement);
inuse_ = 0;
free_area_ = NULL;
free_avail_ = 0;
free_list_ = NULL;
// Reserve some space at the beginning to avoid fragmentation.
Delete(New());
}
我们可以看看New和Delete函数,New函数首先判断free_list是否为NULL,如果非NULL,代表着已经有切出来的object可以用,然后直接从此list里面进行分配(这里面还有个小的技巧,留着后面理解)。如果free_list_为NULL,首先判断,是否有足够的已经分配的空间可用,如果有直接从free_area位置切出一块需要的空间,否则得从系统主动malloc出128k的空间然后开始分配,并调整free_area_,free_avail_和inuse_参数,并返回相应的地址。
T* New() {
// Consult free list
void* result;
if (free_list_ != NULL) {
result = free_list_;
free_list_ = *(reinterpret_cast<void**>(result));
} else {
if (free_avail_ < sizeof(T)) {
// Need more room. We assume that MetaDataAlloc returns
// suitably aligned memory.
free_area_ = reinterpret_cast<char*>(MetaDataAlloc(kAllocIncrement));
// kAllocIncrement = 128 << 10
if (free_area_ == NULL) {
CRASH("FATAL ERROR: Out of memory trying to allocate internal "
"tcmalloc data (%d bytes, object-size %d)\n",
kAllocIncrement, static_cast<int>(sizeof(T)));
}
free_avail_ = kAllocIncrement;
}
result = free_area_;
free_area_ += sizeof(T);
free_avail_ -= sizeof(T);
}
inuse_++;
return reinterpret_cast<T*>(result);
}
Delete函数并不真正的free空间,只是将此obj加入已经被切割obj并且空闲的列表,这里面有个非常有意思的东西,就是通过将下一个obj的地址存在当前obj里面,来进行管理,这样可以和上面New函数中红色部分相对应,通过当前位置free_list_中所存放的地址就可以找到下一个空闲地址。。
void Delete(T* p) {
*(reinterpret_cast<void**>(p)) = free_list_;
free_list_ = p;
inuse_--;
}
文章浏览阅读301次,点赞5次,收藏9次。2024年国际环境科学、资源与材料化学会议(ICESRMC2024)将在中国三亚举行。ICESRMC2024会议主要关注环境科学、资源和材料化学,旨在为环境科学、能源和材料化学领域的专家学者提供一个国际合作与交流平台,分享研究成果,探索存在的问题和挑战,探索前沿技术。我们诚挚邀请国内外相关高校和研究机构的研究人员以及企业的工程技术人员参加会议。涉嫌抄袭的论文将不被出版。2024年环境科学,资源与材料化学国际会议(ICESRMC2024)本会议投稿经过2-3位组委会专家严格审核之后,最终所录用的论文将。_环境化学大会2024
文章浏览阅读9k次。 六:配置时间同步:找到虚拟机设置:点击选项-->找到VMware Tools,打开时间同步即可: 注:如果你是创建一台虚拟机,其他几台都是这台克隆过去的,就可以不用配置时间同步也可以进行。 七:配置文件 1,进入hadoop配置文件目录:命令: 2,更改配置文件core-site.xml : 命令:..._hadoop namenode -format未找到命令
文章浏览阅读809次,点赞20次,收藏22次。DNS(Domain Name System,域名系统)是互联网中的一种分布式命名系统,用于将域名(例如example.com)转换为对应的 IP 地址(例如192.0.2.1)。它充当了互联网上的电话簿,将易记的域名映射到计算机可以理解的 IP 地址。:DNS 的主要功能是进行域名解析。当用户在浏览器中输入一个域名时,操作系统会向本地 DNS 解析器发送查询请求。本地解析器首先检查自己的缓存,如果缓存中没有找到对应的 IP 地址,则会向根域名服务器发送查询请求。
文章浏览阅读899次,点赞9次,收藏11次。rocky linux 兼容红帽系列的操作系统,因此和redhat制作几乎没啥差别,这里主要添加ssh-copy-id命令和显示openssl版本。源码包和二进制rpm包见我的资源。
文章浏览阅读2.7w次,点赞28次,收藏16次。在《python编程:从入门到实践》这本书中的《外星人入侵》的项目里有如下代码:import pygameclass Ship(): def __init__(self,screen): """初始化飞船并设置其初始位置""" self.screen = screen # 加载飞船图像并获取其外接矩形 self.image =
文章浏览阅读796次。本节课对SpringBoot2.0以及之前版本的拦截器进行讲解在SpringBoot1.x的版本中实现拦截器,首先写一个自定义拦截器实现addInterceptors接口,实现其三个方法:package com.qzsun.springbootdemo.intecpter;import javax.servlet.http.HttpServletRequest;import jav..._handlerinterceptor.super.prehandle
文章浏览阅读71次。 抗击疫情致敬逆行者感人类题材、致敬逆行者网页设计作品、大学生抗疫感动专题网页设计作业模板、等网站的设计与制作。️抗击疫情致敬逆行者感人类题材网页设计作品采用DIV CSS布局制作,共多个页面:网站首页、感动人物、动人瞬间、感人视频、感动图集、感动新闻页面。,使用CSS设置了网页背景颜色,制作了导航区域鼠标经过荧光效果。个别页面插入了感人MP4视频。作品代码采用学生简单水平制作,DIV命名合理。 一套优质的网页设计应该包含 (具体可根据个人要求而定)网站布局方面:计划采用目前主流的.....
文章浏览阅读277次。Unity Editor(一)OnInspectorGUI的重写与面板的创建 http://blog.csdn.net/husheng0/article/details/52568027 posted on 2017-05-12 14:27 jiahuafu 阅读(...) 评论(...) 编辑 收藏..._unity editor oninspectorgui
文章浏览阅读395次,点赞11次,收藏8次。红队打靶练习:DJINN: 1,犹如赤狐突袭般的警觉感......
文章浏览阅读434次,点赞9次,收藏3次。社会环境,以及技术环境系统性地归纳总结了中国及国外的ESG发展现状。国,存在一股“反ESG”的趋势,一些投资者持观点认为,ESG仅仅利于,并不能为投资。着,在公司层面分析ESG营销的作用,从消费者,到外部利益相关者,再到企业内部,将。国企业与国际组织合作是进行ESG传播和实践的有效方式,因此本文详细列举了与国际组。ESG因素逐渐被纳入企业发展及资本市场的核心考量之中。我们首先采用PEST模型对可持续发展的宏观环境进行分析,从政策环境,经济环境,织合作的方法和案例,希望能够启发更多的中国企业与国际组织合作。
文章浏览阅读8.1w次,点赞75次,收藏75次。引言及内容概要微信公众平台支持向用户回复音乐消息,用户收到音乐消息后,点击即可播放音乐。通过音乐消息,公众账号可以实现音乐搜索(歌曲点播)功能,即用户输入想听的音乐名称,公众账号返回对应的音乐(歌曲)。读者可以关注xiaoqrobot体验该功能,操作指南及使用如下所示。考虑到歌曲名称有重复的情况,用户还可以同时指定歌曲名称、演唱者搜索歌曲。下面就为读者详细介绍歌曲点播功能的实现过程_音乐消息thumb_media_id是什么
文章浏览阅读3k次,点赞2次,收藏18次。文章目录一、创建UI界面二、获取网络歌曲三、创建和链接信号槽疫情肆虐,憋在家实在无聊,索性写点东西,于是就有了这个极极极极极简的音乐播放器。这个极极极简的音乐播放器类似于“阅后即焚”的软件,播放器可以随机播放歌曲,获取下一首歌曲,不能重新播放上一首歌曲,不能获取歌曲的名称和演唱者。听过的歌曲,就像过眼云烟,放完即散。下面来看看如何用Python实现这个音乐播放器软件吧!一、创建UI界面..._pyside2播放声音