码农的荒岛求生专栏头像

码农的荒岛求生 订阅号

已收录 16 篇技术文章 0 位工程师关注
底层的任何疑惑都能在这找到答案
专栏矩阵

专栏文章列表(16)

彻底理解链接器:六,大型项目是如何被构建出来的

彻底理解链接器:六,大型项目是如何被构建出来的

在讲解大型项目如何被构建之前,我们首先来讨论一个问题,有句话说的很好,梦想总是要有的,万一实现了呢,那么问题来了,要怎么实现呢,这里就涉及到了如何实现目标, 目标是如何实现的 其实很简单,本质上只有两点: 知道最后想要的是什么 为此需要做些什么 有时我们的

彻底理解链接器:五,重定位

彻底理解链接器:五,重定位

我们继续来讲解链接器的重定位。 程序的运行过程就是CPU不断的从内存中取出指令然后执行执行的过程,对于函数调用来说比如我们在C/C++语言中调用简单的加法函数add,其对应的汇编指令可能是这样的:  call 0x4004fd 其中0x4004fd即为函数

彻底理解链接器:四,库与可执行文件的生成

彻底理解链接器:四,库与可执行文件的生成

我们继续来看动态链接。 我们知道静态库在编译链接期间就被打包copy到了可执行文件,也就是说静态库其实是在编译期间(Compile time)链接使用的,那么动态库又是在什么时候才链接使用的呢,动态链接可以在两种情况下被链接使用,分别是load-time dy

彻底理解链接器:三,库与可执行文件的生成

彻底理解链接器:三,库与可执行文件的生成

在链接器可操作的元素这一节中我们提到,链接器可以操作的最小单元为目标文件,也就是说我们见到的无论是静态库、动态库、可执行文件,都是基于目标文件构建出来的。目标文件就好比乐高积木中最小的零部件。 给定目标文件以及链接选项,链接器可以生成两种库,分别是静态库以及动

彻底理解链接器:二,符号决议

彻底理解链接器:二,符号决议

在链接器可操作的元素一节中我们提到,所有的应用程序都是链接器将所需要的一个个简单的目标文件汇集起来形成的。你可以将这个过程想象成拼图游戏,每个拼块就是一个简单的目标文件: 1,拼图游戏当中的每个拼块都依赖于其它拼块提供的拼接口,这就好比我们写的程序模块依赖于其

彻底理解链接器:一,前言

在介绍本章的主题之前,我们先来看几个问题: 问题一 写C/C++的同学应该经常遇到这样的一个Error:  "undefined reference to ABC" 在遇到这样的问题时你知道这背后到底哪里出问题了吗? 你通常都能顺利解决类似问题吗? 问题二 作

不简单的hello world之C标准库(第二部分)

不简单的hello world之C标准库(第二部分)

目录 库(Library)的定义 为什么需要库 库是如何生成 库里面有什么 库的分类 如何创建库 什么是标准库 标准库的优点 这是承接上一篇文章《不简单的hello world值C标准库第一部分》。我们继续该主题的内容。

不简单的hello world之C标准库

不简单的hello world之C标准库

目录 库(Library)的定义 为什么需要库 库是如何生成 库里面有什么 库的分类 如何创建库 什么是标准库 标准库的优点 在上一篇文章当中我们分析了hello world这个程序的第一行,那么我们接下就开始看后面的代码

不简单的Hello World之头文件

不简单的Hello World之头文件

今天我们就来说说在程序界里无人不知无人不晓大名鼎鼎的Hello World,好比数学界里大名鼎鼎1+1=2,无数码农入坑正是从写这样一段代码开始的,从此踏入了万劫不复的深渊一发不可收拾。。。这段代码是这样写的, include <stdio.h>

彻底理解C++中的适配器模式!

你是一名C++大牛,正在开发公司的核心业务系统,这个系统里有一套统一的日志接口: class ILogger { public:     virtual void log(const std::string& message) = 0;     vir

C++虚函数是如何一步步发明出来的?

你是一名1980年代初的C语言程序员,正在开发图形界面库,今天你需要处理圆形、矩形、三角形,每种图形都要实现两个操作:绘制和计算面积。 你喝了口咖啡,开始敲代码。 你的第一版代码是这样的: void draw_circle(Circle* c) {     

Linux中的CFS调度器是如何一步步发明出来的?

1965年,你是一名操作系统工程师,计算机刚刚从单任务时代进入多任务时代——现在一台计算机可以同时运行多个程序了。 但你面临一个棘手的问题:只有一个CPU,10个程序都想运行,该让谁先执行? 这是个看似简单实则困难的问题,如果处理不好,可能会出现各种各样的古怪

为啥C++程序会在main函数之前崩溃?

"线上服务崩了!但日志里什么都没有,程序还没进main函数就挂了!"运维工程师的声音里带着慌张。 这个数据库服务已经稳定运行了三个月,为什么发布新版本突然崩溃?更诡异的是,今天的发布只是加了一个无关紧要的日志模块。 你开始复盘代码,日志模块很简单,就是一个全局

Linux性能分析工具汇总

Linux性能分析工具汇总

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是

彻底理解C++中的观察者模式!

你是一名C++程序员,负责开发公司的核心的股票交易系统,老板见到你都得喊一声哥,系统的核心是一个Stock类,存储股票的实时价格: class Stock { private:     std::string symbol_;     double price

hash表、快排与二分查找:两数之和

通知:很多同学和我反馈经常看不到发布的文章,现在公众号已经不按照发送时间推荐了,而是根据一些规则乱序推送,所以可能关注了「码农的荒岛求生」也一直看不到文章,可以把「码农的荒岛求生」设置星标,设置星标后,后续发布就可以准时看到文章了! 大家好,我是小风