Linux gcc没有默认对齐数(内赋gcc官方大佬邮件)

轻松求得系统的默认对齐数 在自己解决问题中遇到了内存对齐的问题。突然发现我的Linux默认对齐数好像不是4。可以参考这个OJ题来理解。有趣的内存对齐面试题CSDN上好像所有的博客都说是4。然后就记录一下怎么推断出自己系统的默认对齐数。 推断对齐数 首先,我们先写一个程序: #include &...

2019-05-11 14:21:00

阅读数 62

评论数 0

Socket 编程

Socket 编程 socket 常见 API socket 创建 socket 文件描述符。 适用于 TCP/UDP 协议。 这个函数是服务器和客户端都需要用。 参数: domain: 这是需要填一个宏,表示要用什么协议。例如这里填 AF_INET表示创建的socket使用 ipv4协议。...

2019-06-15 12:20:45

阅读数 13

评论数 0

封装UDP Socket API并且构建一个简单的回显服务器

封装UDP Socket API并且构建一个简单的回显服务器 因为 Socket API 用起来非常的不便利,所以我将把 Socket API 封装起来,让我以后写程序的时候不再关注那些不重要的细节,而是把我的关注点放在接收到请求之后,怎么处理这个请求上。 udp_socket_api.hpp...

2019-06-12 15:57:21

阅读数 18

评论数 0

七大经典排序

七大经典排序 插入排序 插入排序开始先把第一个数字作为一个有序子数组,然后从第二个数字开始。 既然前面是一个有序的数组,那么当前这个数组只要逐个跟前面的有序子数组比较就行。 如果当前数字比前面的数字小,就把前面的数字往后挪一个位置。 直到当前的数字比比较的数字( 下标为:j )大为止,把当前数字填...

2019-06-12 15:23:32

阅读数 14

评论数 0

最后还有红黑树!

最后还有红黑树! 红黑树的概念: 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 红黑树的性质: 每个结点不是红色就是黑色。(...

2019-06-07 17:18:03

阅读数 15

评论数 0

简单的线程池

简单的线程池 什么是线程池? 线程池就是线程的一种使用模式。虽然线程是轻量级的进程,但是线程的创建和销毁还是会引发效率问题。并且,如果创建的线程过多,反而会增加很多的调度开销,影响系统效率。 线程池就是可以提前创建好一些线程,在我们需要使用线程的时候,对已经创建好的线程添加任务就好。 线程池的使用...

2019-06-07 16:08:41

阅读数 10

评论数 0

生产者消费者模型概要和基本练习

生产者消费者模型 什么是生产者消费者模型? 完成某些操作的时候可能需要一些数据,这样的数据可能由专门的 线程/进程产生, 再由专门的线程/进程使用。 需要有一个交易场所。(存储数据的地方,可能是一个队列、栈或者其他数据结构) 生产者:负责产生数据,然后把数据放到交易场所中。 消费者:负责消...

2019-06-06 18:09:08

阅读数 6

评论数 0

锁(哲学家就餐问题)

2019-06-05 17:37:35

阅读数 12

评论数 0

线程的同步与互斥

线程的同步与互斥 之所以会引出这个概念全都是因为 “线程之间是抢占式调度的”。 关于线程互斥的一下关键词: 临界资源:多个线程访问的那个公共资源叫做临界资源。 临界区:访问临界资源的代码叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用...

2019-06-05 17:16:20

阅读数 12

评论数 0

虚函数的默认参数的值是依赖对象静态类型决定的

虚函数的默认参数的值是依赖对象静态类型决定的 我们来先从一道题来引出这个问题: 这道题的要求是输出结果是什么? 如果你的选项不是B,那么你需要跟着我一起来学习一下,虚函数的默认参数到底需要取哪个? 标准库规定 就是说,虚函数的默认参数取的是静态类型的。 那么什么是静态类型呢?举个栗子

2019-06-04 19:30:56

阅读数 23

评论数 0

那么AVL树呢?

那么AVL树呢?

2019-06-03 16:43:18

阅读数 22

评论数 0

使用gdb调试多线程程序

使用gdb调试多线程程序 在我们日常打代码的日子里,肯定会涉及到多线程的程序,那么在Linux下编写多线程的程序应该如何调试呢。 void *ThreadEntry(void *arg) { (void)arg; while (true) { std::c...

2019-06-01 17:31:35

阅读数 24

评论数 0

Linux线程控制​

Linux线程控制​ 线程控制的相关函数不是系统调用是库函数。 线程控制的函数库是POSIX线程库。 POSIX是一个标准,规定了操作系统需要写哪些接口供程序员来使用。 与线程有关的函数大多数都是以pthread_开头的。 需要使用线程函数库的时候需要引入头文件 <pthread&...

2019-06-01 17:12:40

阅读数 23

评论数 0

二叉搜索树你懂了吗?

二叉搜索树你懂了吗? 什么是二叉搜索树? 二叉搜索树就是当我们需要对一组非常庞大的数字进行搜索时,什么样的数据结构才能让我们用尽量少的时间来搜索到我们想要找的数字呢?(当然也可以是其他数据类型,这里我用数字来举例) 这个时候我们想到了树型结构,可是树型结构也得需要一定的规律插入才能达到我们想要的效...

2019-05-30 19:28:25

阅读数 29

评论数 0

进程与线程

进程和线程有什么区别? 这里我们可以先确定两个大的不同。 进程:资源的管理(管理内存,管理打开文件…) 线程:调度和执行(调度规则:和进程类似也是抢占式调度) 举个栗子

2019-05-29 16:40:24

阅读数 25

评论数 0

未决信号、阻塞信号、信号处理函数表

未决信号、阻塞信号、信号处理函数表 实际执行信号的处理动作称为信号递达(Delivery)。 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。 注意,阻...

2019-05-28 10:48:40

阅读数 19

评论数 0

volatile 是个坑

volatile 是个坑。 volatile 关键字是告诉编译器,不要把这个变量放到寄存器里。 我们先来看一段代码: #include <iostream> #include <csignal> int flag = 1; void ...

2019-05-28 10:19:36

阅读数 51

评论数 0

信号--Signal

信号–Signal 信号的作用就相当于神经系统,来帮助操作系统进程运行过程中遇到的各种意外。 在Linux系统中通过命令kill -l来查看所有信号。 信号产生的方式: 1. 通过终端按键产生信号(键盘产生) 最常见的键盘产生的信号: ctrl + c => 2对应的是2号信号...

2019-05-28 10:00:17

阅读数 20

评论数 0

内存池的弟弟---对象池

内存池的弟弟—对象池 关于什么是内存池,内存池有什么优势,什么是对象池我已经在我的GitHub上写在了Readme.md文件里了,GitHub链接 这篇博客主要讲一下一个简单的对象池实现过程。 对象池的结构: 首先我确定了一个类ObjectPool来实现一个链表,这个链表上的每一个结点都挂着...

2019-05-16 13:29:08

阅读数 8

评论数 0

“负责”的进程等待

“负责”的进程等待 什么是进程等待? 进程等待就是父进程等待子进程结束并退出,然后回收子进程。 为什么要进行进程等待? 如果子进程退出,父进程不对子进程做出处理的话,就会造成僵尸进程,那么这个时候只要父进程不退出,那么子进程一直占用资源,就会造成内存泄漏。并且僵尸进程不可以被信号终止掉。这个问题...

2019-05-14 20:28:10

阅读数 27

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭