c++
顾文繁
功不捐唐终入海
展开
-
C语言实现C++面向对象特性
使用C语言实现面向对象三大特性原创 2022-07-26 11:12:42 · 507 阅读 · 0 评论 -
condition_variable条件变量
有次面试,面试官问我有没有了解过条件变量(之前看的Linux高性能服务器编程书中,绝对提到了这个,都忘光了),我回答没有。。。。今天回过头来,整理一下。这里是引用Condition variableA condition variable is an object able to block the calling thread until notified to resume.It uses a unique_lock (over a mutex) to lock the thread when原创 2022-05-05 11:58:53 · 802 阅读 · 0 评论 -
cpp 堆/堆排序
https://www.cnblogs.com/jingmoxukong/p/4303826.html首先应该先了解堆的基础知识。再向下调整或者向上调整时,要明确的几个点。设当前元素在数组中以R[i]表示,那么,(1) 它的左孩子结点是:R[2i+1];(2) 它的右孩子结点是:R[2i+2];(3) 它的父结点是:R[(i-1)/2];本质是对一颗完全二叉树的操作。#pragma once#include <iostream>#include <vector>原创 2022-03-22 18:03:25 · 1690 阅读 · 0 评论 -
1.什么是内存对齐?内存对齐有什么意义?2. 请简述C++中函数调用过程并解释栈帧的概念。
什么是内存对齐?现代计算机中内存空间都是按照 byte 划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。为什么要进行内存对齐尽管内存是以字节为单位,但是大部分处理器并不是按字节块来存取内存的。它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度。假如没有内存对齐机制,数据原创 2022-03-07 16:24:30 · 385 阅读 · 0 评论 -
linux 编译动态链接库
准备好头文件编译文件生成.so动态链接库文件g++ -shared -fPIC mylib.cpp -o libmylib.so其他程序调用动态链接库g++ test.cpp -lmylib -L/root/lib-l(小写L)指定调用的库名称-L指定库的路径#!/bin/bashLD_LIBRARY_PATH=./export LD_LIBRART_PATH...原创 2022-02-22 19:46:20 · 481 阅读 · 0 评论 -
C++线程常见包装类实现
C++多线程不如Java那样启动和停止线程那么优雅,如何做到开启线程像Java那样呢?本文将介绍常见的封装C++11线程方式。线程和其他任务一个样,开启,执行,结束。在CPP当中,执行任务这这一过程就相当于一个回调函数一样,在Java当中有开启线程的方式继承Thread和实现Runnable接口,哈哈哈哈哈哈,一下回到大二听贾老师了属于是,那我们就来实现Java当中的集成Thread这种方式。定义接口Start ()Stop()Main()这里的Start()和Stop()函数都是virt原创 2021-10-26 11:27:27 · 254 阅读 · 0 评论 -
unordered_map 自定义结构为Key
有如下结构体struct Word { int len = 0; int ascii = 0; Word(string str) { len = str.length(); for (char c : str) { ascii += c; } }};需要使用如下场景unordered_map<Word, vector<string>>m;这里需要实现哈希函数和重载()函数struct Hash{ std::size_t operat原创 2021-10-10 22:35:27 · 908 阅读 · 0 评论 -
c++ ifstream中的eof()方法
使用ifstream的一般步骤:ifstream ifs; ifs.open(".\\..\\..\\resources\\out_800_600_25.rgba", ios::binary); if (!ifs) { cout << "文件打开失败" << endl; return 0; } int size = 800 * 600 * 4; unsigned char* rgba = new unsigned char[size]; int read_s原创 2021-09-29 17:08:30 · 4141 阅读 · 2 评论 -
Linux线程库
线程引言Linux上最有名的线程库是LinuxThreads和NPTL,它们都是采用1:1的方式实现的。现代Linux上模式运行的线程库是NPTL(Native POSIX Thread Library)。可以使用getconf GNU_LIBPTHREAD_VERSION查看当前系统上使用的线程库。从Linux内核2.6开始,提供了真正的内核线程。新的NPTL线程库应运而生。相对于LinuxThreads,NPTL的主要优势在于:内核线程不再是一个进程,这就避免了很多进程模拟内核线程原创 2021-06-29 21:16:58 · 1239 阅读 · 1 评论 -
静态联编译和动态联编译
联编将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)C语言中,每个函数名都对应一个不同的函数,在C++中由于函数重载的缘故,这项任务更复杂。编译器必须查看函数参数以及函数名才能确定使用那个函数。然而C/C++编译器可以在编译过程完成这种联编。在编译过程中进行联编被称为静态联编(static binding)。然而虚函数使得这项工作变得更困难。编译器必须生成能够在程序运行时选择正确的虚方法的代码,这被称为动态联编(dynamic binding)。#incl.原创 2021-06-21 09:07:15 · 75 阅读 · 0 评论 -
适配器模式(C++)多重继承和组合实现
别人写好的代码时经过验证过的,所以不需要修改,在使用别人代码时或者对别人写的类库进行封装时,就用到了适配器模式。多重继承实现原创 2021-05-31 22:18:55 · 501 阅读 · 6 评论 -
懒汉单例模式出现的线程安全问题(C++)
在懒汉模式中,由于存在一个并没有被实例话的静态指针,在多线程环境中,导致在静态获取实例方法/函数时,会有多个线程进入到该代码进行实例对象(线程安全问题),下面展示存在线程安全的懒汉单例模式代码:...原创 2021-05-28 09:09:44 · 785 阅读 · 1 评论 -
C/C++变量分配区域
/** *1. 内存栈区: 存放局部变量名;2. 内存堆区: 存放new或者malloc出来的对象;3. 常数区: 存放局部变量或者全局变量的值;4. 静态区: 用于存放全局变量或者静态变量;5. 代码区:二进制代码。 *//** * 1. static 无论全局变量还是局部变量,都存储在全局/局部静态区域,在编译期, * 就分为分配内存,在程序结束时释放。 * 2. const全局变量存储在只读阶段,编译期间最初将其保存在符号表中,第一次使用时为其分配内存 * 程序结束时释.原创 2021-05-23 10:08:36 · 260 阅读 · 0 评论