- 博客(101)
- 资源 (6)
- 收藏
- 关注
原创 什么是批处理系统,多道程序设计,分时系统?
在解答什么是批处理系统之前,先想想为什么会有批处理系统,当一个事物出现时,一定是为了解决某个问题,知道了这个原因,就能更好的理解这个事物。同上,我们先看历史。
2024-10-27 20:48:30 611
原创 fork中的死锁问题
我们要尽量在多线程程序中使用fork()使用fork()后立即调用exec()避免在持有锁时调用fork()当然当我们编写多进程大型程序时,很难避免,特别是引用了一些三方库这些不受控的代码。
2024-10-15 22:10:50 320
原创 【功能安全】什么是Aspice?
英文全称:Automotive Software Process Improvement Capability dEtermanitionASPICE4.0文档汽车软件过程改进及能力评定,是汽车行业用于评价软件开发团队的研发能力水平的模型框架。最初由欧洲20多家主要汽车制造商共同制定,于2005年发布,目的是为了指导汽车零部件研发厂商的软件开发流程,从而改善车载软件的质量。德国的一些整车厂,一起推动和制定了这个规范。这么一个组织。
2024-10-12 22:50:09 692
原创 c++类成员函数的inline属性
问题类成员函数添加inline关键字的原因是什么,为什么存在?为什么存在?Bjarne在《The Design and Evolution of C++ 》中描述“带类的C”时有相关介绍:将inline函数引进带类的C,直接原因是一个具体的项目。在该项目中,由于某些类与实时处理有关,这种函数调用的开销是无法接受的;为了使类机制能够成为在这个应用中有用的东西,就要求在跨越保护屏障时不付出任何代价。只有在类声明中提供一种可用表示,并能把对公用(界面)函数的调用变成在线的(inline),才可能达到这个
2022-02-20 12:22:20 833
原创 松弛型内存模型(Relaxed memory models)的一个有趣的例子
代码例子性能测试代码#include <benchmark/benchmark.h>int A, B;void func1() { A = B + 1; asm volatile("pause" ::: "memory"); B = 0;}void func2() { A = B + 1; B = 0;}void BM_MemoryBarrier(benchmark::State& state) { for (auto _
2022-01-17 20:06:59 651
原创 Google benchmark使用手册及范例
构建集成在robotic_arm的third_party已经集成了benchmark,只需在相关测试用例代码的CmakeLists.txt添加如下内容:target_link_libraries(xxx PRIVATE benchmark pthread)Demo样例存在以下模式样例:1. 使用BENCHMARK、BENCHMARK_MAIN宏#include <benchmark/benchmark.h>#include <chrono>#include <
2021-12-03 19:37:54 6545
原创 字节序: big-endian vs little-endian
如何快速记忆big-endian又名大尾序,就是数值的尾巴存储在大地址上。尾是相对我们认识的变量值,大是指地址;相对应,little-endian又名小尾序,数值的尾巴存储在小地址上。一句话大小是尾巴的地址,尾巴是数值的尾巴,指的是0xABCD(十进制43981)的D 如何判断字节序是大端还是小端通过二进制工具查看: readelf -h mainint main(){ return 0;}编译出二进制g++ main.cpp -o main使用readelf查看字节序
2021-10-31 17:57:56 349
原创 Thread Local Storage理解
Thread Local Storage理解带着问题去学习1. 什么是thread local storage?一种计算机编程方法,使用线程本地静态或全局的内存。2. 主要作用是什么?避免资源竞争;当多个线程访问同一个资源时,会产生竞争。当将资源声明为thread local storage时,则不会有竞争。使用全局对象方法的重入性;比如一个函数使用全局变量设置一个错误码(比如c库中的errno),如果errno是个全局变量,一个系统方法会重写这个值之前刚被另外一个线程修改,然而另一个线程的代
2021-10-31 01:08:35 1423
原创 C++代码review问题<三>:变量默认初始化
题记变量是我们编写程序的必不可少的元素(可谓程序大厦的一砖一瓦),当我们声明定义一个变量后,这个变量的初始值是什么,你可能会有疑惑(如果没疑惑,请确保你是已经完全清楚而不是不关心或者不在意,因为不符合预期的变量值,会将程序带到undefine behavior的境地);为了全面理解变量的初始化,我们按照下面几个方面进行分析:变量的种类(都有哪些变量),变量在进程内存中的存储位置、变量的初始值、变量的规范初始化变量的种类分为两大类:local variable、non-local variable;
2021-10-16 22:39:03 181
原创 C++代码review问题<二>:CMakeLists编写的一些规范
add_definitionsCMake文档描述Adds definitions to the compiler command line for targets in the current directory and below (whether added before or after this command is invoked)影响范围大( targets in the current directory and below ),会污染其他cmake文件。可以使用set_targ..
2021-10-14 20:51:32 197
原创 C++代码review问题<一>
包含头文件时,推荐使用c++风格详细讨论见知乎帖子:https://www.zhihu.com/question/51288493看下来一句话:都可以,c++风格代码风格会优雅些 #include <stdio.h> // bad #include <cstdio> // good非必要情况下,不使用无符号类型主要遵循c++ google style:You should not use the unsigned integer types such as.
2021-10-11 20:38:48 199
原创 Ros1中的pub和sub是如何建立连接的?
Ros1中的pub和sub是如何建立连接的?先上时序图,一睹为快连接拓扑关系简要描述连接拓扑关系:pub<–>rosmaster: pub节点进程与rosmaster使用xmlrpc机制进程通讯,xmlrpc是基于xml格式和http协议的一种rpc(remote procedure call)。sub<–>rosmaster: 同pub节点。pub<–>sub: 节点间使用socket(tcp/udp传输层协议)进行连接连接过程中的数据流图...
2021-09-10 19:44:23 1044
原创 ros源码下载及编译
Ros1 源码下载及编译准备工作Setup your sources.listSetup your computer to accept software from packages.ros.org.sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'Set up your keyssudo a
2021-08-27 20:02:35 2682
原创 知识点学习
C++多态的原理是什么? 虚表什么时候确定,存放位置?虚函数的作用,为什么要用虚函数,virtual的其他用法?运行时多态和编译时多态区别,及优缺点?多态就是在基类函数上加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数,如果对象类型是派生类,则调用派生类的函数,如果对象类型是基类,则调用基类的函数。对于存在virtual关键字的对象,维护一个指向虚函数表的指针,虚函数表存放了该对象的所有虚函数地址;虚函数表是在编译阶段确定的,存放在程序的只读数据区; 指
2021-04-29 23:50:34 147
原创 uint8使用stringstream序列化和反序列化的坑
关于uint8使用stringstream序列化和反序列化注意点问题现象(通过一个例子查看)例子:int main(int argc, char** argv) { uint8_t in = stoi(string(argv[1])); printf("in: %c, %d\n", in, in); // 序列化 std::ostringstream ostream; ostream.str(""); ostream << in;
2020-12-17 21:38:21 1395
原创 进程间通信:condition_variable && unique_lock(c++)
condition_variable(条件变量)简介互斥锁用于上锁,条件变量用于等待;condition_variable类是一个同步原语,可以用来阻塞一个线程,或者同时阻塞多个线程,直到另外一个线程修改了条件(a shared variable: the condition)并且通知了condition_variable(notify).修改条件,并通知获取一把锁,通常使用std::lock_guard。在锁锁定的状态下,修改条件。调用notify_one 或者 notify_all,进行
2020-08-05 11:55:00 2371
原创 C++对象模型:构造函数语意--Default Constructor 什么时候生成,又做了什么
引言C++ Annotated Reference Manual中告诉我们:default constructors 在需要的时候被编译器产生出来;那么被谁需要?又做了什么事情呢?一个简单的例子#include <stdio.h>class Foo { // 不会合成出一个default constructorpublic: int val; Foo *pNext;};void FooBar(){ Foo bar; if (bar.val ||
2020-07-27 16:52:49 398
原创 从c++ istringstream读取字符(二)
get、getline、readgetsingle characterint get();istream& get (char& c);功能:从流中提取单个字符。返回该字符(第一个方法),或将其设置为参数的值(第二个方法)。c-stringistream& get (char* s, streamsize n);istream& get (char* s, streamsize n, char delim);从流中提取字符并将其作为c字符串存储在
2020-06-28 20:18:51 1845 1
原创 从c++ istringstream读取字符(一)
c++ istringstream读取字段之operator>>istringstream的继承关系如下:operator>>操作符继承istream,为extraction operator(导出符),它被重载为以下3类成员函数:arithmetic types(算术类型)istream& operator>> (bool& val);istream& operator>> (short& val);ist
2020-06-28 19:13:49 1961
原创 C++智能指针实现(shared_ptr, non-intrusive reference count)
题计根据上编智能指针好文中counted_ptr.h,实现智指针。智能指针实现的方式 (下面代码按照该方式实现)代码#include <iostream>class Data {public: Data(int data) : data(data){} ~Data() { std::cout << "~Data(): " << data << std::endl; } int data;};
2020-06-23 21:15:48 305
原创 子类初始化列表不能初始化父类元素 -- class 'Derived' does not have any field named 'x'
缘由偶尔编写如下代码,编译出错,class Base{public: int x;};class Derived : public Base {public: Derived() : x(10) { cout << "Derived " << x << endl; }; int y;};int ...
2019-12-12 19:14:16 6586
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人