Blog

malloc的实现原理

Content #

malloc到底是怎么实现的呢?

有一种做法是,把进程的内存管理交给操作系统内核去做,既然内核管理着进程的地址空间,那么如果它提供一个系统调用,可以让程序使用这个系统调用申请内存,不就可以了吗?当然这是一种理论上可行的做法,但实际上这样做的性能比较差,因为每次程序申请或者释放堆空间都需要进行系统调用。我们知道系统调用的性能开销是很大的,当程序对堆的操作比较频繁时,这样做的结果是会严重影响程序的性能的。

比较好的做法就是程序向操作系统申请一块适当大小的堆空间,然后由程序自己管理这块空间,而具体来讲,管理着堆空间分配的往往是程序的运行库。

运行库相当于是向操作系统“批发”了一块较大的堆空间,然后“零售”给程序用。当全部“售完”或程序有大量的内存需求时,再根据实际需求向操作系统“进货”。当然运行库在向程序零售堆空间时,必须管理它批发来的堆空间,不能把同一块地址出售两次,导致地址的冲突。于是运行库需要一个算法来管理堆空间,这个算法就是堆的分配算法。

glibc的malloc函数是这样处理用户的空间请求的:对于小于128KB的请求来说,它会在现有的堆空间里面,按照堆分配算法为它分配一块空间并返回;对于大于 128KB的请求来说,它会使用mmap()函数为它分配一块匿名空间,然后在这个匿名空间中为用户分配空间。

From #

程序员的自我修养

批判性公民(critical citizens)

Content #

政治学里有一个词叫“批判性公民”(critical citizens)。根据这个理论,随着一个国家经济社会发展,民众权利和尊严意识提高,他们会变得越来越具有批判性。这些饶舌民众的基本特点是:大惊小怪、小题大做、不依不饶,一哭二闹三上吊。什么?法定退休年龄从60升到62?岂有此理,游行去。燃油税要涨7 毛钱?天理难容,抗议去。政府要砍掉一半的大学生助学金?欺人太甚,扔臭鸡蛋去。

罗素说,所谓民主,就是选一个人上去挨骂。

From #

观念的水位

理性的无知

Content #

“理性的无知”最早是一些学者用来形容美国选民的。有调查表明,美国很多选民非常无知,比如,大约一半美国人不知道每州有两个参议员,四分之三不知道其任期;约一半美国人不知道代表本区的众议员是谁,40%不知道本区的参议员是谁……这些数字自从有民意调查以来竟一直相对稳定。在分析这种无知的原因时,有学者指出:这种无知对于选民是理性的——一张选票能改变整个选举结果的可能性极小,为了这张选票而投入大量时间精力去了解政治实在“太不划算”。

在我看来,“理性的无知”这个概念可以解释的不仅仅是西方选民的无知,理性的内容也不仅仅是时间精力的投入产出分析。刻意的无知可能带来丰厚的利益报酬,在这里,无知是一种精明。选择性的失明则可能带来意识形态上的自我保护,在这里,无知则是一种逃避。

From #

观念的水位

思想改造的配方

Content #

哪怕与其他共产主义国家相比,中国的共产主义革命也是极其独特的。这种独特性体现在,在政治动员的规模、程度与可持续上,其他国家都与中国无法相比,而这种空前绝后的政治动员又与共产党“思想改造”的能力密切相关。正是人们的“灵魂”被改造了,才使得革命的血雨腥风得以狂飙突进。也就是说,中国革命最独特的地方,在其思想改造之成功——如此成功,以至于与其他共产主义国家相比,毛时代的中国几乎不需要秘密警察:人与人之间的相互监视以及人的自我监督已经足以支撑这个制度的运转。

在高华的文字里,我们读到了这种思想改造的“配方”:资源的垄断式供给 + 全面改写历史前提下的信息封闭与观念灌输

  • 在群体中孤立个体
  • 强力威胁;

以及这种“思想改造”外科手术般的“程序”:封闭的学习文件 → 组织群体对个体进行批评与攻击→ 自我羞辱式的检查与“交心”→ 必要时的惩罚甚至暴力惩罚→ 纠偏阶段受害者的感激涕零。

这一套“配方”与“程序”,在以后历次整风运动中屡试不爽,甚至被日常化和制度化,效果不断积累,最终形成了“文革”的悲剧。

From #

观念的水位

批评自由的自由

Content #

弗格森写的英帝国史是一部“修正主义”历史。在当代语言体系中,有些词汇会引起我们本能式的反感,比如种族隔离、纳粹、殖民主义。而弗格森的《帝国》,则大约会使读者再看到“英国殖民主义”这个词时,激愤的程度略有降温。说他试图捍卫殖民主义当然不公平——这本书完全没有讳言英国1870年代对印度饥荒的漠然、1865年在牙买加对民众的镇压、1898年在苏丹的残酷杀戮、1899年波尔战争中臭名昭著的集中营,但是他试图引领读者去思考那个我们也许从来没有思考过的“另一方面”。

“另一方面”,英帝国不同于其他帝国的特点在于,每当英国人对他国实施暴行时,英国内部总有激烈的批评声响起。这是弗格森对英帝国特点的总结。就是说,在英帝国的拓展中,英国商人获得了强加贸易给落后国家的“自由”,英国军队获得了暴力镇压土著的“自由”,但是英国政府从来没有因此剥夺民众批评这种“自由”的自由。在英帝国这个猛虎向世界扑去的时候,它从来没有试图杀死在自己耳旁嗡嗡作响的“苍蝇”,直到猛虎蜕变成了家猫,而苍蝇在嗡嗡声中变成了老鹰。

From #

观念的水位

习得性无助(learned helplessness)

Content #

动物研究也显示出具有控制感带来的好处,过去人们并不像现在这样关注动物的权利,曾有研究发现,被关入笼内而无法逃避电击的狗,会习得一种无助感。之后,这些狗就算处在可以逃避惩罚的情境中,也只会被动地畏缩。狗如果学会了自我控制(成功地逃避开最初的那些电击),会更容易适应新的情境。研究者马丁·塞利格曼(Seligman,1975,1991)指出这种习得性无助(learned helplessness)在人类情境中也同样存在。例如,抑郁或压抑的人变得被动,是因为他们认为自己的努力没有任何作用。无助的狗和抑郁的人都丧失了意志,被动顺从,甚至死气沉沉。

无法控制的不利事件 –> 知觉到缺乏控制 –> 习得性无助

当动物和人经历无法控制的不利事件时,他们习得了无助和被动。

From #

社会心理学(戴维·迈尔斯)

自我效能和自尊

Content #

许多人分不清自我效能和自尊。如果你相信你有能力做一些事,这就是自我效能。如果你由衷地喜欢你自己,这就是自尊。当你还是一个孩子的时候,家长经常会鼓励你说:“你是特别的!”(目的是建立自尊感),而不会说“我知道你能行!”(目的是建立自我效能感)。一项研究显示,自我效能感的反馈(“你真的已经很努力了”)会比自尊的反馈(“你真的很棒!”)引起更好的表现。跟孩子说他们很棒,会使他们恐于再次尝试——可能他们下一次不会表现得这么好。而那些能够激励他们继续努力的赞扬则会让他们在下一次付出更大的努力 (Mueller&Dweck,1988)。如果你想要鼓励某人,那就提升他们的自我效能而不是他们的自尊。

From #

社会心理学(戴维·迈尔斯)

自我效能(self-efficacy)

Content #

斯坦福大学的心理学家艾伯特·班杜拉(Bandura,1997,2000,2008)在他的研究中发现了积极思维的力量,并提出了自我效能(self-efficacy)(我们感到有能力完成某项任务)理论——对自己能力与效率的乐观信念可以获得很大的回报 (Bandura&others,1999;Maddux&Gosselin,2003)。自我效能感较高的儿童和成人更有韧性,较少焦虑和抑郁。他们还生活得更健康,并且有更高的学业成就。

在日常生活中,自我效能指引我们制定有挑战性的目标,并在面对困难的时候具有较强的毅力。一百多个研究显示,自我效能可以预测工人的生产力 (Stajkovic&Luthans,1998)。当出现问题时,较高的自我效能感会指引工人保持平静的心态并寻求解决方案,而不是反复认为自己能力不足。能力加坚持就能产生成就。伴随着成就的获取,自信就会增强。像自尊一样,自我效能感会随着辛苦付出换来的成就而增强。

From #

社会心理学(戴维·迈尔斯)

真实且具体的反馈是最好的

Content #

具体的自我知觉(self-perception)的确会有一定的影响。如果你认为你擅长数学,你将更有可能在数学方面做得好一些。即使整体自尊不能很好地预测学业表现,但学业的自我概念(你是否认为自己在学校中表现良好)能预测学业表现 (Marsh&O’Mara,2008)。当然,任何事情都会引起其他的结果:你在数学方面做得比较好,会使你相信你擅长数学,继而会激励你去做得更好。所以,如果你想去鼓励一个人(包括你自己),你最好给予具体的表扬(“你很擅长数学”)而不是泛泛的表扬(“你很棒”);而且如果你的赞誉反映真实的能力和表现(“与上一次测验相比,你真的有所提高”),而不是盲目的乐观主义(“你能做任何事”)。真实且具体的反馈是最好的(Swann&others,2007)。

想象一下,你刚拿到心理课第一次测验的成绩。当你看到你的分数徘徊在D和F之间时,发出了一声叹息。但是过后你收到了一封鼓励你的电子邮件,里面不仅有对课堂表现的评论,还包含了这样一些信息:“高自尊的同学不仅能够得到更好的分数,而且还能拥有自信……最后一行:高昂起你的头,你的自尊会更高。”另一组的同学收到的信息却只有让他们控制好自己的表现,或者只是收到一些评论。这两组同学在期末考试中会各有什么表现呢?在一项研究中令所有研究者惊讶的是,那些自尊心膨胀的学生在期末考试中表现得前所未有的差,事实上,都不及格(Forsyth&others,2007)。研究者猜想,告诉差一些的同学要保持良好自我感觉,可能会使他们认为:“既然我都这么好了,那为什么还要学呢?”

From #

社会心理学(戴维·迈尔斯)

双重态度系统(dual attitude system)

Content #

威尔逊(Wilson,1985,2002)提出一个大胆的设想:控制我们社会行为的心理过程与解释我们行为的心理过程显然不同。我们的理性解释可能会因此忽略了实际上指引我们行为的内在态度。在9个实验中,威尔逊及其同事(1989,2008)发现,对事和人表现出的态度常常能较好地预测以后的行为。如果他们事先让被试分析自己的感受,那么他们的态度报告将变得无效。例如,情侣对于他们关系的幸福感可以很好地预测在几个月后他们是否会继续约会。但是,如果被试在评价自己的幸福程度之前就已经列出其关系好坏的所有原因,那么之后他们的态度报告在预测未来关系时变得无效!很显然,仔细研究自己关系的过程会使个体更多地注意容易描述的因素,而事实上这些因素并没有关系中的其他方面重要。我们常常是“自己的陌生人”,威尔逊如是说(Wilson,2002)。

双重态度系统(dual attitude system)指的是:

  1. 我们关于人或事的自动的内隐态度
  2. 受意识控制的外显态度。

例如,从儿童时期开始,我们可能会对那些我们现在口头上尊敬和欣赏的人保持一种习惯的、自动的恐惧或厌恶。威尔逊指出,尽管可能外显态度改变起来相对容易一些,“内隐态度就像老习惯一样,改变起来非常缓慢。”然而,通过重复练习来形成新的态度,新的习惯态度就能够代替旧的态度。

这些自我认识的局限性具有两种应用价值:第一是对于心理调查来说,自我报告常常是靠不住的,自我理解中的错误限制了主观个人报告的科学性。

其次,在我们的日常生活中,人们报告和解释其经验的真实性无法保证这些报告的有效性。我们知道,法庭上个人证言具有强大的说服力,但是这有可能是错误的。牢记这种潜在错误,可以帮助我们较少产生受人胁迫和上当受骗之感。

From #

社会心理学(戴维·迈尔斯)