c语言
文章平均质量分 95
落樱弥城
无无
展开
-
动态库的入口——VCRT(DLL)和CRT(SO)
为了更加深入的理解动态库的加载初始化过程,本文根据VCRT和Linux-CRT的代码实现详细描述了windows和linux平台下对应动态库加载时会进行哪些工作。本文重点关注全局变量的初始化时机,以及是否有其他额外的操作。原创 2023-06-23 00:25:11 · 1020 阅读 · 0 评论 -
程序员自我修养阅读笔记——静态链接
测试环境:➜ tmp uname --versionuname (GNU coreutils) 8.25Copyright (C) 2016 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute .原创 2021-09-21 22:59:09 · 412 阅读 · 0 评论 -
调用约定
调用约定是一种定义函数从调用处接受参数以及返回结果的方法的约定。 不同调用约定的区别在于:参数和返回值放置的位置(在寄存器中;在调用栈中;两者混合);参数传递的顺序(或者单个参数不同部分的顺序);调用前设置和调用后清理的工作,在调用者和被调用者之间如何分配;被调用者可以直接使用哪一个寄存器有时也包括在内。(否则的话被当成ABI的细节);哪一个寄存器被当作volatile的或者非volatile的,并且如果是volatile的,不需要被调用者恢复。 调用约定与名称修饰(名称修饰决定了原创 2020-08-31 22:18:04 · 1188 阅读 · 0 评论 -
redis源码5.0.5阅读整理(未完成)
文中内容参考《redis设计与实现(第二版)》和redis源码,由于该书写的比较早,主要以源码(redis5.0.5)为主。 虽说是参考的源码的,但是主要内容仍然来自书籍。 笔记中的内容并不完整,redis有点儿多,先做一个简单的整理,如果工作中会用到的话再做一个完整的版本吧! 前面的相关数据结构部分可以看一下,后面的内容并没有很全面的整理,之后需要的话对源码进行一次完整的阅读。1 redis数据结构与对象1.1 动态字符串1.1.1 数据结构定义//deps/hired.原创 2020-06-15 15:00:30 · 976 阅读 · 0 评论 -
Linux IO模式及IO多路复用
1 简介 Linux的设计哲学是“一切皆为文件”,比如磁盘被抽象为块设备,键盘被抽象为字符设备等等。因此对不同设备读取和写数据时可以使用系统调用write和read两个操作进行数据交互。通常读取数据的过程是使用open打开一个文件描述符–>使用write或者read读写数据–>使用close关闭文件。 然而对于计算机系统,请求数据本身是一个过程,现代操作系统大多采用段页式虚拟内存进行内存管理。在Linux中如果目标数据不在内存中则需要出发缺页中断将数据缓存到页缓存中供用户端使用,即数据原创 2020-06-03 12:28:03 · 347 阅读 · 0 评论 -
优先队列
优先队列优先队列概念 优先队列是一种用来维护一组元素组成的数据结构,而每个元素都有一个对应的值。 优先队列分为最大优先队列和最小优先队列。 最大优先队列和最小优先队列二者区分和大根堆和小根堆的区分方式基本相同,因为最大优先队列和最小优先队列就是大根堆和小根堆的一种应用实例。比较常见的场景是计算机系统中的作业优先级调度。 这里提到的优先队列只是利用堆实现的一种方式,当然也可以使原创 2017-04-05 21:12:16 · 695 阅读 · 0 评论 -
堆排序,多叉堆及其性能测试
堆排序堆的概念 堆本身为一棵完全二叉树,即拥有的特点是n个结点的堆的高度为logn+1log_n+1,若将堆按照1….n的按层进行编号则第i个结点如果有左孩子的话则它的左孩子的为第2×i个结点,如果它有右孩子的话右孩子为第2×i+1个结点,可以利用这个性质将数组构建成一个堆并且进行方便的索引。 堆分为大根堆和小根堆。 大根堆指所有结点的关键字不小于其子结点的关键字的完全二叉树。原创 2017-04-05 14:01:48 · 806 阅读 · 0 评论 -
最大子数组和
最大子数组和问题描述: 求一个有序序列的最大子数组和,即求的这个数组的子数组中和最大的数组。解决问题方法:1、暴力枚举: 利用简单的循环枚举出所有的可能性进行比较得到最终的结果。/*** 最大子数组求解问题(L为线性表)* 问题描述:已知一个数组序列L,求出该数组的最大子数组,即数组元素之和最大的子数组*/typedef int type;/** * 用来保存所求的的原创 2017-03-26 19:29:15 · 422 阅读 · 0 评论 -
矩阵乘积计算(Strassen)
矩阵乘积计算(Strassen)问题描述 已知A,B两个矩阵计算其乘积C?矩阵乘积数学公式: 假设存在两个矩阵A为m×n矩阵,B为k×l矩阵,若需要计算AB则必须n=k,若需要计算BA必须l=m否则无法进行计算,先假定n=k即B为n×l矩阵则AB的结果为一个m×l的矩阵并且该矩阵每个点的元素的值表示为CijCij则:方法一:直接计算 直接利用多重for循环求出相关矩阵对应的点的值即原创 2017-03-29 22:22:13 · 2989 阅读 · 0 评论 -
void和void*指针的解析
前段时间看了篇文章讲到了C语言中void的用法细节,但是只是进行了说明并未进行实例分析也没有说明C++中void是否有区别,因此今天我在这里详细说明一下void的一些细节。分析结果皆来自代码分析,并未查阅相关技术文档,如有错误请指正。 void的定义:void在C和C++是一种数据类型,意为“空指针”。 void类型在C语言中:无法定义 void类型变量,无论是cl还是gcc编译器原创 2017-01-07 11:18:54 · 1262 阅读 · 0 评论 -
《C专家编程》阅读笔记
《C专家编程》阅读笔记下面整理的是《C专家编程》这本书中提到的一些C语言的缺陷的存在争议的问题。其中罗列的程序都是经过调试运行的,《C专家编程》中提到的一些bug或者缺陷若已经在本人使用的C版本中得到修复将不再重述,只会简略提到。书中提到的很多问题都是在没有一款强的IDE的情况下,现如今我们的IDE足够强大很难产生作者提到的很多问题,但了解这些不无裨益。环境:windows7旗舰版编译器:gcc (原创 2017-01-01 19:03:11 · 1343 阅读 · 0 评论