- 博客(42)
- 收藏
- 关注
原创 替换elf使用的libc.so.6
3. 设置LD_LIBRARY_PATH, 让新的ld-linux.so.2可以找到其他库所在的位置,1. 下载编译需要的glibc版本, 新版本的glibc需要高版本的gcc和gmake, make。2. 使用patchelf更改elf的ld-linux.so.2, [
2023-08-25 09:40:47 332
原创 gcc 链接选项-static -static-libstdc++ -static-libgcc使用分析
当我们使用g++编译c++程序是,一般都会动态链接libstdc++.so共享库,有时候受限于不同机器和使用场景,我们希望静态链接libstdc++.so库,这样可能便于移植到相似的机器上,这时候就可以使用-static-xxx选项,将所有的库打包成一个可执行文件。他们之间的主要不同点在于:-static 会将所以有用到的外部库全部以静态的方式链接-static-libstdc++ 只将libstdc++.so静态链接-static-gcc 同-static-libstdc++...
2022-05-24 19:03:44 7138 2
原创 C++ static 变量和线程安全和单例模式
static变量初始化顺序1.1 全局变量、文件域的static变量和类的static成员变量在main函数执行之前初始化1.2 局部静态变量在第一次被使用时初始化static变量的线程安全2.1 非局部静态变量是线程安全的2.2 局部静态变量在C++11后也是线程安全的单例模式分为懒汉式和饿汉式,在使用前全局对象已经创建的是饿汉式单例,在使用的时候创建的是懒汉式单例01. 普通懒汉式单例,线程不安全// 懒汉式单例模式,线程不安全class SingleInstance
2021-11-23 14:32:21 6049 3
原创 Linux设置软件开机自启
Linux设置程序自启动,除了通过系统设置中添加软件外,还可以有一个非常简单的方法,以manjaro为例,简单介绍如下:(1)桌面创建启动器,比如我安装了electron_ssr,创建一个启动器(.desktop文件)后显示如下内容:[Desktop Entry]Encoding=UTF-8# Name :指定快捷方式名称。Name=electronSSRComment=ssr# E...
2020-04-25 19:44:44 3876 1
原创 Manjaro添加软件或者脚本自启动
创建一个.desktop文件,将其放置到~/.config/autostart 文件夹下,开机会自动加载~/.config/autostart 文件夹其实挺类似于 Windows 下的启动文件夹,系统开机时会执行该文件夹下的每个 desktop 文件 Exec 参数指向的脚本或可执行文件。一个最简单的 desktop 文件模板如下:[Desktop Entry]Name=<应用程...
2020-04-12 20:11:02 5098
原创 使用Git Bash和GitHub进行你的版本管理操作流程
准备工作Git和GitHub使用SSH加密传输,所以要在你的本地机器上和GitHub服务器上都保留一份加密和解密的规则,这份规则就是SSH keys。需要先在本地生成key再保存到GitHub上,过程如下:cd ~/.sshls查看ssh文件夹中是否有id_isa和id_isa.pub两个文件,没有的话按照如下步骤创建:ssh-keygen -t rsa -C &amp;amp;quot;your_githu...
2018-11-23 14:09:53 624
转载 [C++]初始化列表详解
初始化列表是在类的构造函数中使用的。初始化列表在初始化内置类型(int,float等)的时候和在构造函数内赋值没有太大的性能差别,但是在初始化自定义类型的时候,初始化列表可以减少赋值构造函数的调用,有利于性能。 ...
2018-10-29 10:58:58 1484
原创 静态成员变量和静态成员函数有关的注意点
一个很重要的点是:类的静态成员变量和静态成员函数是在类被实例化之前就分配好内存空间的,这个时候类的非静态的变量和函数都没有被分配内存。首先是结论:结论1:不能通过类名来调用类的非静态成员函数。结论2:类的对象可以使用静态成员函数和非静态成员函数。结论3:静态成员函数中不能引用非静态成员。结论4:类的非静态成员函数可以调用用静态成员函数,但反之不能。结论5:类的静态成员变量必...
2018-10-15 09:33:29 909
转载 C++虚函数中默认参数的问题
默认参数是静态绑定,多态是动态绑定,函数调用时要将参数压入堆栈,但是动态调用的情况下编译器时期是不知道调用哪一个函数,压入哪一个参数。 ...
2018-10-08 16:25:59 1632
原创 deque与vector的区别
一、vector为什么叫单端序列容器申明存储空间之后,第一个元素的地址一直是恒定的,添加元素是只能向后生长,push_front()操作需要将所有的元素向后移动一片空间。vector被定义之后一般会有一个预定的空间capacity(),空间不够的时候才会去申请新的空间二、deque为什么叫双端序列容器、deque在定义存储空间之后,没有预设的空间大小,是在元素添加的时候实时扩充空间的,所以...
2018-09-19 16:06:54 1533
原创 C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用
一、 构造函数是干什么的 class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; }private: // 数据成员 ...
2018-09-10 21:33:08 1063 2
原创 cin输入、cin.get()输入和cin.getline()输入的区别
cin输入 程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。 cin输入结束的条件:Enter、Space、Tab。cin对这些结束符的处理:丢弃缓冲区中这些...
2018-09-05 10:59:33 2941 1
原创 [C++] 类对象所占内存空间分析和总结
类所占内存的大小主要是由成员变量(静态变量除外)决定的,成员函数(虚函数除外)是不计算在内的。成员函数的存储还是以一般函数的模式进行存储。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。类中的成员函数相当于C语言中一个普通函数,按照一个普通函数的方式存储在内存中,做到使得两者相联系...
2018-08-23 16:23:35 9106 4
转载 GPU--CUDA编程模型、GPU硬件架构及其之间的对应关系
block-----thread block,grid-----kernel,warp--sm的调度单元。
2018-08-15 20:05:56 1821 1
转载 static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗?
static的作用:对变量:1.局部变量:在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。 1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。 注:当static用来修饰局部变量的时...
2018-06-08 14:30:11 6674
转载 虚函数实现机制、构造函数、析构函数能否为虚函数,与纯虚函数
虚函数虚函数是C++中用于实现多态的机制。核心理念就是通过基类指针访问派生类中定义的函数。虚函数允许子类重新定义成员函数,继承时不重新定义虚函数也是可以的。而子类重新定义父类的做法称为覆盖(override),或者称为重写。如果父类或者祖先类中函数func()为虚函数,则子类及后代类中,函数func()是否加virtual关键字,都将是虚函数。为了提高程序的可读性,建议后代中虚函数都加上vir...
2018-06-08 14:29:49 2339
原创 C++类的前向声明(forward declaration)
一、使用场景假设有两个类A和B,类A要将类B的对象作为自己的成员使用,并且类B将类A的对象作为自己可以访问的数据,那么这个时候要在a.h中include b.h,同时在b.h 中要include a.h,但是相互包含是不可以的,这个时候就要用到类的前向声明了。二、使用方法假设B类中已经包含了a.h,那么在A类中不能再包含b.h,要在A类中前向声明类B,如下# include "B.h" clas...
2018-06-08 14:29:27 37012 1
转载 数组指针和指针数组的区别; 二维数组和指针的关系
指针和数组的区别C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。数组...
2018-05-23 15:10:50 6826 1
原创 C++类访问控制、继承情况下的访问权限变化的问题
本文记录一下知识点,以便以后查阅。这里面的可见性或者访问权限其实都可以从两个方面来考虑:对类(也就是类内部的成员)、对类实例化的对象。一、对于类访问控制 当一个类被创建出来之后,类里面被声明为public、protected、private的成员的相互访问权限是什么样的呢?从一下四个方面来看。publicprotectedprivate类成员是否可以访问 yesyesyes类的实例化对...
2018-03-08 14:33:08 1452 2
转载 双调排序算法(Bitonic Sorting)原理分析
双调序列排序的原理请参考下面这篇博客:参考博客 下面仔细分析一下任意序列实现双调序列的排序过程: 如图,一个16元素的任意序列排序 1、任意两个元素组成一个单调序列,使得相邻的两个序列的单调性相反,一共有8个单调序列。 2、将这两个相邻的序列组合形成一个双调序列,此时有4个双调序列。运用双调序列的排序方法进行排序。排序结果是有4个单调序列。注意:只包含两个元素的单调序列也可以看成是双调序
2018-01-23 17:12:53 1716
转载 c++ bitset用法总结
bitset b; b有n位,每位都为0.参数n可以为一个表达式.如bitset b0;则"b0"为"00000"; bitset b(unsigned long u); b有n位,并用u赋值;如果u超过n位,则顶端被截除如:bitsetb0(5);则"b0"为"00101"; bitset b(string s); b是string对象s中含有的位串的副本str
2017-09-07 10:09:15 1552
转载 函数对象,lamdda表达式,function函数包装,std::bind函数绑定
一 函数对象在学习其他知识之前,先来学习函数对象,然后引出std::lambda、std::function、std::bind等内容的学习,那么究竟什么是函数对象呢?函数对象(Function Object)又称函数对象类、仿函数、高阶函数等,函数对象实际上是指那些可以被传入其他函数或是从其他函数返回的函数(比如std::for_each函数的第3个参数就要求传入接受一个参数的函数或
2017-08-30 14:11:45 935
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人