more_effective_cpulsplus
指针与引用在这样情况下,使用指针:
可能存在不指向任何对象的可能
需要在不同时刻指向不同的对象。
在这样情况下,使用引用:
上述的其他情况
重载操作符时,返回值用引用
c++风格类型转换static_cast ,很多类型转换的工作
const_cast, 去掉const 或 volatileness 属性
dynamic_cast, 安全的沿着类的继承关系向下进行类型转换
reinterpret_cast, 指针之间转换(通常不可移植)
多态与数组不应该一起使用如果创建了派生类数组,将其传给基类数组形参,虽然不会报错,但内存分布有很大的问题,派生类一般大于基类,而基类数组间隔小于派生类数组间隔,会导致错误。有很大的潜在问题:
12345678910111213141516171819202122#include <iostream>using namespace std;class Base{ public: int a = 6;};class Der: public Base{ public: int ...
cplusplusprimer
输入运算符必须处理输入可能失败的情况,而输出运算符不需要。
至于为什么,个人看法,操作系统分层,从硬件到系统到应用程序,数据是一步步传输的,哪里产生的错误由哪里处理,输出时,程序可以保证数据的类型和格式一致(如果和预期不一致,那是你写错了),而之后的错误进入到了操作系统层,不应该由用户处理。至于输入,操作系统应该能保证输入没问题,到软件层,再进行错误检测。
面对对象程序设计(oop)三个基本概念:数据抽象、继承、动态绑定。
数据抽象:将类的接口与实现分离
继承:定义相似的类型,并对其相似关系建模
动态绑定:一定程度上忽略相似类型的区别,用统一的方式使用对象。
前向声明类(仅声明的类)可以应用的场景:
指针和引用
作为函数参数或返回类型
用在模板参数中,如:class A; vector<A> vec;
作为静态成员变量的类型,(像那种不允许实例化的类,一般都会存一个自己)
PyTorch_h
Tensor & autogradTensor支持gpu加速,可以在ipython/notebook使用<function>? 查看帮助文档,也可以在代码中用help(function)这里的function就不用加小括号了,如
12torch.ones? #仅用于notebook/ipython#help(torch.ones)
基础操作从接口,对tensor操作分为两类(torch.sum(a, b), a.sum(b)):
torch.function, 如torch.save (torch 是导入的模块名)
tensor.function, 如tensor.view (tensor代表的是创建的tensor对象名,)
从存储,对tensor操作分为两类:
不会修改自身数据,如a.add(b),会返回一个新的tensor
会修改自身数据,如a.add_(b)
创建tensor方式:
Tensor函数是最复杂多变的方式,可以接收list,可以指定形状,可以传入其他的tensor,或者torch.Size类别。
1234a = t.Ten ...
经验记录
linux相关
kill多个进程ps -ef | grep -v grep | grep tcp | cut -c 9-15 | xargs kill
ps -ef 列出所有进程,grep -v grep 去除和grep相关进程,grep xxx查找带有xxx字符串的进程,cut -c 11-15取出每行11-15,刚好是进程id,xargs kill,使用之前的内容为参数,由kill来执行。
映射端口到本地(jupyter)
服务器上使用jupyter notebook后,将可以在服务器上通过localhost:port访问代码。但是本地上确访问不了服务器的代码。通过端口映射将服务器端口映射到本地参考文章:
1ssh -p 3090 -NfL 10086:202.115.17.239:10086 ming.xing@202.115.17.239
-p 指定端口,是指访问服务器的端口,平时访问服务器时也必须使用ip+port(202.115.17.239:3090)访问,此处也必须指明端口。否则都找不到服务器。(与后处的10086端口有区别,后面的10086指服务器系统里 ...
bug记录
1
stm32f103
错误现象:不使用 freertos 时,可以完成外设初始化,可以完成点灯,串口发送数据。使用 freertos 时,即使把外设初始化函数放到 main 函数最前面,然后立刻点灯,串口发数据,都看不到效果。使用 freertos 时,但删除掉 xTaskCreate 函数(包含heap初始化代码)后,可以点灯,收到数据。
错误原因:在使用 freertos 操作系统时,如果开启了动态创建任务,需要加入内存管理文件(我的是 heap_4.c ),需要定义一个数组供其使用
123456 static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];/*config.h*///系统所有总的堆大小#define configTOTAL_HEAP_SIZE ((size_t)(5*1024)) //stm32f103x8 似乎最大只有 20k //这里被设置成了5k,需要注意的是,虽然sram容量大于10k,但如果设为10k没法运行 //sram大小好像是20k
需要注意的是,对应不同芯片,配置的值 ...
vmware_wsl网络配置
需求:
因为学习需要,需要在vmware下coding,不免就需要查资料等,需要访问外网,但不想在虚拟机上再安装一个clash,想直接利用windows下clash的allow lan功能来共享网络。
虚拟机上ip最好是静态的,便于与开发板进行通信。
由于很多内容在windows下完成更便捷,也需要完成wsl访问外网的配置。
VMware三种网络模式分为桥接,NAT模式,Host-Only模式三种模式,(很多内容参考这篇文章:VMware的三种网络模式,),一般vmware会虚拟出 vmnet0,vmnet1,vmnet8三个虚拟交换机,后两个会生成两个虚拟网卡,这两个虚拟网卡通常可以在windows下 更改适配器选项 中看到。(个人:主机有多少不同的网卡,就可以与多少不同的局域网进行通信,不管是物理网卡还是虚拟网卡)
桥接模式原理:桥接模式是最简单的一种,桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。主机网卡也起到了交换机的作用,主机网卡,虚拟交换机下的那四个交换机都处于同一个网域内,掩码,网关应该一致,各机器之间也可以相互ping通。
配置:在v ...
计算机专业术语对照
z
这个网页查全称很强,注意选择范围 it:What does VSMA stand for? (abbreviations.com)
但是还是要具体语境具体分析,最好从上下文判断。
计算机专业术语对照A
abstraction layer,抽象层
access,获取,存取
acoustic coupler,声音耦合器
Active Directory,活动目录
Acyclic Dependencies Principle,非循环依赖原则(ADP)
acyclic digraph,有向无环图
Adaptive Code,自适应代码
Add Parameter,添加参数
ADSL,Asymmetrical Dingital Subscriber Loop,非对称数字用户环线
affinity,绑定
affinity group,地缘组
agent,代理
agent-based interface,代理人界面
Aggregate,聚合
Aggregate Root,聚合根
Agile,敏捷方法论
agile practice,敏捷实践
agile process,敏捷流程
agility, ...
imx6ull使用
.
相关bug可以查看 《bug记录/imx6ull》
从 USB 下载程序按照正点原子步骤编译链接,更改为二进制文件,
1234led.bin : 1_leds.s arm-linux-gnueabihf-gcc -g -c 1_leds.s -o led.o arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
要想在imx上运行,还需要在 bin 文件前加上一个头部,用于初始化 ddr,这个正点原子已经给出 imxdownload。(它程序中配置的是将imx文件拷贝到 SD 卡,需要将这些文件注释掉,保留创建 imx 的文件).
12gcc -o imxdownload imxdownload.csudo ./imxdownload led.bin /dev/sdd
最后获取 nxp 提供的 uuu 工具(不是用aptget安装的),
1sudo snap install univer ...
程序员的自我修养-第八章
。
共享库版本兼容性共享库的更新可能兼容可能不兼容。
以前还以为这种库提供的接口只是属于API层面,现在看看其实这些接口属于ABI层面。因为这些库(以ELF文件形式存在的动态链接文件)其中的一些操作,比如参数传递方式、虚函数表、多重继承等都给出了明确定义,但这些东西在库的使用者电脑上可能是完全不同的,这就可能导致兼容性问题。
其实想想啊,如果不是以共享库的形式,而是以源代码的形式提供给用户,是不是接口就只是在API层面,就不用考虑ABI层面的兼容问题了呢?
共享库命名方式
主版本,不同号码,可以不兼容
次版本,高级的可以兼容低级的,一般是增加一些接口
发布版本号,一般是修改库的错误,性能,不提供新接口
不遵守规则的库,比如 /lib/x86_64-linux-gnu/libc-2.31.so
SO-NAMELinux使用一种SO-NAME的方式来记录共享库的依赖关系。SO-NAME就是去掉第二个和第三个版本号剩下的部分。系统会为每个共享库在他的目录创建一个和SO-NAME相同的软链接指向该库。标准格式:libfoo.so.2. ...
程序员的自我修养-第七章
。
之前写过一点动态链接的内容:动态链接
为什么要用动态链接太浪费空间,很多公共库函数在内存中有很多副本。
程序开发和发布不易,尤其是使用到第三方厂商提供的库时。
动态链接:将链接推迟到运行时再进行。
可拓展性:动态链接还有一个特点就是可以在运行时动态的加载各种程序模块,这个优点就是后来被人们用来制作程序的插件(Plug-in)。
缺陷:由于新旧模块接口不兼容,导致原来程序无法运行,如windows 中的 dll hell。
动态链接的基本实现:
动态链接涉及运行时的链接及多个文件的装载,必需要有操作系统的支持,因为动态链接的情况下,进程的虚拟地址空间的分布会比静态链接情况下更为复杂,还有一些存储管理、内存共享、进程线程等机制在动态链接下也会有一些微妙的变化。
动态链接例子编写代码如下:
1234567891011121314151617181920212223242526272829303132ttj@ttj ~/c/shell> more prog1.c prog2.c lib.c lib.h::::::::::::::prog1.c::::::::::::::#in ...