c++学习小结

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现 本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。 阅读详情

内存分配

空间

栈区(stack)。编译器⾃动分配与释放,主要存放函数的参数值,局部变量值等,连续的内存空 间,由⾼地址向低地址扩展。

堆区(heap) 。由程序员分配与释放;不连续的空间,通过空闲链表进⾏连接。堆是低地址向⾼ 地址扩展,空间较⼤。频繁地分配和释放不同⼤⼩的堆空间将会产⽣堆内碎块。

静态存储区。存放全局变量和静态变量;分为全局初始化区和全局未初始化区。

常量存储区。存放常量字符串;对于全局常量,编译器⼀般不分配内存,放在符号表中以提⾼访问 效率。

程序代码区。存放函数体的⼆进制代码。

对象内存分配方式

class Base {

    public:
    Base(){
         cout << "Hello, world!base base" << "\n";
    }
    ~Base(){
         cout << "Hello, world!base ~base" << "\n";
    }
  
    void go() {
        cout << "Hello, world!base go" << "\n";
    }
};


class Player : public Base{
    public:
    Player(){
         cout << "Hello, world!player base" << "\n";
    }
  
    ~Player(){
         cout << "Hello, world!player ~base" << "\n";
    }
    void go() {
         cout << "Hello, world!player" << "\n";
    }
};

栈空间分配

1函数结束而回收(会调用析构函数) 创建时会调用构造函数

int main()
{
    Base base;
    return 0;
}

输出

new 堆空间分配

1. 分配未初始化的内存空间(malloc)。若出现问题则抛出异常

2. 使⽤对象的构造函数进⾏初始化。若出现异常则⾃动调⽤delete释放内存

3 使用delete回收(会调用析构函数)  创建时会调用构造函数

int main()
{
    Base *base = new Base;
    base->go();
    delete base;
    return 0;
}

输出

malloc 堆空间分配

1 通过 brk() 系统调⽤从堆分配内存:如果⽤户分配的内存⼩于 128 KB,就是通过 brk() 函 数将「堆顶」指针向⾼地址移动,获得新的内存空间。free 释放内存的时候,并不会把内存归还给 操作系统,⽽是缓存在 malloc 的内存池中,待下次使⽤;

2 通过 mmap() 系统调⽤在⽂件映射区域分配内存。free 释放内存的时候,会把内存归还给 操作系统,内存得到真正的释放

3 使用free回收 

int main()
{
    Base *base = (Base*)malloc(sizeof(Base));
    base->go();
    free(base);
    return 0;
}

输出

构造函数和析构函数

class Base {
    public:
    Base(){
         cout << "Hello, world!base base" << "\n";
    }
    ~Base(){
         cout << "Hello, world!base ~base" << "\n";
    }
  
    void go() {
        cout << "Hello, world!base go" << "\n";
    }
};

如果在栈空间分配 那么声明时就调用构造函数

函数结束时调用析构函数

如果是用new在堆空间分配

new时会调用构造函数

delete时会调用析构函数

子类和父类

class Base {
    public:
    Base(){
         cout << "Hello, world!base base" << "\n";
    }
    ~Base(){
         cout << "Hello, world!base ~base" << "\n";
    }
  
    void go() {
        cout << "Hello, world!base go" << "\n";
    }
};

class Player : public Base{
    public:
    Player(){
         cout << "Hello, world!player base" << "\n";
    }
  
    ~Player(){
         cout << "Hello, world!player ~base" << "\n";
    }
    void go() {
         cout << "Hello, world!player" << "\n";
    }
};
int main()
{
    Player *player = new Player;
    delete player;
    return 0;
}

输出 可以发现构造函数是先调用父类的再调用子类的

析构函数则相反 先子类再父类的

子类实例化父类

int main()
{
    Base *base = new Player;
    base->go();
    delete base;
    return 0;
}

输出 可以看到构造函数还是会父类加子类的  但是本质上base还是Base类的对象 所以go函数调用的还是父类的接口 

析构函数调用的是父类的

虚函数

若类可能被继承,且需通过基类指针管理派生类对象,基类析构函数必须为虚函数

也就是父类想调用子类的函数 那么就使用虚函数

class Base {
    public:
    Base(){
         cout << "Hello, world!base base" << "\n";
    }
    virtual ~Base(){
         cout << "Hello, world!base ~base" << "\n";
    }
  
    virtual void go() {
        cout << "Hello, world!base go" << "\n";
    }
};
int main()
{
    Base *base = new Player;
    base->go();
    delete base;
    return 0;
}

输出 

可以看到构造函数还是 父类加子类的

但是go函数调用的是子类的接口

然后析构函数是子类再加父类的 因为父类的析构函数也是虚函数 

虚函数也会占用对象的内存大小

volatile、extern区别

volatile int i=10;

在cpu内核中有l1 l2 l3缓存   

每个核心拥有自己的l2 每个核心的超线程拥有自己的l1 所有核心共享l3

那么l1 和内存就有相同数据的多份拷贝

volatile的变量就是每次读就是读内存中的数据 不读l缓存的数据

extern声明的对象或者函数 表明读取全局的对象 有外部连接性 表示使用的是其他文件的对象

预处理、编译、汇编、链接

预处理阶段:预处理器根据 # 开头的命令,修改原始的程序,如把头⽂件插⼊到程序⽂本中,删除所有 的注释等。

编译阶段:编译过程就是把预处理完的⽂件进⾏⼀系列的词法分析、语法分析、语义分析等,最终产⽣ 相应的汇编语⾔⽂件,不同的⾼级语⾔翻译的汇编语⾔相同。编译是对源⽂件分别进⾏的,每个源⽂件 都产⽣⼀个⽬标⽂件。

汇编阶段:把汇编语⾔代码翻译成⽬标机器指令。

链接阶段:将有关的⽬标⽂件和库⽂件相连接,使得所有的这些⽂件成为⼀个能够被操作系统装⼊执⾏ 的统⼀整体。链接处理可分为两种: 静态链接:函数的代码将从其所在的静态链接库中被拷⻉到最终的可执⾏⽂件中。这样程序在被执 ⾏时会将其装⼊到该进程的虚拟地址空间中。

静态链接库实际上是⼀个⽬标⽂件的集合,其中的每 个⽂件含有库中的⼀个或者⼀组相关函数的代码。

动态链接:函数的代码被 放到 称作是动态链接库或共享对象的某个⽬标⽂件中。

链接程序要做的 只是在最终的可执⾏⽂件中记录下相对应的信息。在可执⾏⽂件被执⾏时,根据可执⾏程序中记录 的信息,将动态链接库的全部内容映射到相应运⾏进程的虚拟地址空间上。 对于可执⾏⽂件中的函数调⽤,可分别采⽤动态链接或静态链接的⽅法。使⽤动态链接能够使最终的可 执⾏⽂件⽐较短⼩,并且当共享对象被多个进程使⽤时能节约⼀些内存,因为在内存中只需要保存⼀份 此共享对象的代码。但并不是使⽤动态链接就⼀定⽐使⽤静态链接要优越

数据结构

数组

int arr[5] = {1, 2, 3, 4, 5};
cout << arr[0]; // 输出第一个元素

结构体

struct Person {
    string name;
    int age;
};
Person p = {"Alice", 25};
cout << p.name << endl; // 输出 Alice

栈

stack<int> s;
s.push(1);
s.push(2);
cout << s.top(); // 输出 2
s.pop();

队列

queue<int> q;
q.push(1);
q.push(2);
cout << q.front(); // 输出 1
q.pop();

哈希表

unordered_map<string, int> hashTable;
hashTable["apple"] = 10;
cout << hashTable["apple"]; // 输出 10

映射

map<string, int> myMap;
myMap["apple"] = 10;
cout << myMap["apple"]; // 输出 10

集合

set<int> s;
s.insert(1);
s.insert(2);
cout << *s.begin(); // 输出 1

动态数组

vector<int> v;
v.push_back(1);
v.push_back(2);
cout << v[0]; // 输出 1

SAP 供应商寄售(VMI)完整实现方案 摘要:本文详细讲解了SAP系统中供应商寄售(Consignment)和VMI(供应商管理库存)的实现方法。核心逻辑是物料所有权属于供应商,仅在领用时才触发采购。文章包含配置步骤(物料主数据、供应商设置、定价协议、会计科目等)、端到端操作流程(收货、库存查询、领用、结算、付款)、关键差异比较(与普通采购的区别)、核心事务码和数据表。重点说明了寄售流程无需采购订单,通过信息记录维护价格,领用时才产生应付账款的特点,并提供了常见问题解决方案和VMI进阶优化建议。 阅读详情

相关推荐

Amber分子动力学模拟:蛋白结构准备全流程与关键注意事项

分子动力学模拟是研究蛋白结构、配体结合与构象变化的重要计算手段,其结果的可靠性高度依赖初始结构的质量。在Amber模拟体系中,结构准备是决定后续计算成败的“一票否决”环节,任何缺失残基、错误质子化状态或未处理的二硫键都可能让长时程模拟失去意义。从PDB原始文件出发,需依次完成结构检查与清洗、残基命名统一、配体参数化、金属离子建模、加氢及质子化状态判断,最后通过tleap构建力场、溶剂盒子与离子环境。这一过程看似琐碎,却直接决定了蛋白在模拟中的物理合理性。无论是解析催化机制、评估药物结合亲和力,还是探索构象变

weixin_31714129的博客 237

C++学习小结

C++学习小结。

u013096791的博客 116

飞思卡尔16位单片机(二)——CodeWarrior开发环境搭建及新建、调试工程

一、安装CodeWarrior 飞思卡尔16位单片机的开发环境为CodeWarrior5.1,这个软件安装比较简单,软件的安装文件可以从相应的网站上下载。安装CodeWarrior所需要的电脑的硬件资源也比较宽泛,目前一般的电脑都可以满足这个要求,可以支持win10、win7等操作系统。安装过程按照按照软件的提示一步步操作即可。 二、安装USBDM驱动 USBDM是...

bigmarshal的博客 1万+

C++学习技术小结

一、学习C++有一段时间了,感触比较多,也认识到C和C++的一些差异。C++也叫C plus plus,或者Cpp。C语言是一种结构化编程,C++语言是一种面对对象编程,C++语言相比于C语言更加深层次,能使程序的开发和维护变得更加简单,也能使一些C语言不能解决的问题用简单的方法解决。 二、技术小结 1、定义结构 定义结构,需要使用struct语句。Struct语句定义了一个包含多个成员的新的数据类型,struct语句的格式如下: struct type_name { member_type1 membe

weixin_44484452的博客 324

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

小邓子分享官的博客 1878

GMSL2摄像头接入避坑指南:从FMC子卡配置到V4L2调用的完整流程(附Ubuntu20.04实测)

本文详细解析了GMSL2摄像头接入的全流程,从FMC子卡配置到V4L2调用的完整指南。基于XC7Z100平台实测经验,提供了硬件选型、带宽优化、Linux驱动配置及高分辨率采集的实战技巧,帮助开发者规避常见问题,提升系统稳定性与性能。

weixin_33737774的博客 417

学习C++小结

       每当年末,总会有一些新闻单位,或者是出版社,网站之类的,推出什么十大的,我作为个人也不能免俗,不过我不出推什么闺女十大,倩仔十大的,我主要是想做一下个人的小结,看一年下来的得与失,不是给什么人看,中作为指导自己成长的日志,仅些而已。好了,费话不在多说,                转眼间,现在已经是大二了,对我一个专科生来说,大学已经过了一大半了,然而我所学到的知识少得可怜,从今年

半夜下雨 1540

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

C++学习一些小结

一、构造和析构函数 C++在幕后为你写的的函数:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写: class Empty{}; 和你这么写是一样的: class Empty { public: Empty(); ...

weixin_34206899的博客 98

笔试题-2023-星宸-数字IC设计【纯净题目版】

4 笔试题-2023-星宸-数字IC设计【纯净题目版】

w0shishabi的博客 1171

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

C++学习经验小结

此前,自己学习C++书看了不少。《C++ Primer Plus》 5th (当时以为是《C++ Primer》)是自己看的第一本C++的书籍,此书看得我头昏眼花的,整个看书的时间就有半年,由于当时过分注重细节,而且图速度,没能很好的实践,也就是一个一知半懂,但是基本上形成了一些影像,能看懂一般的代码了。此后就乱看了一些,都很杂,而且没有系统看,直到半年后拿起《Thinking in C++》上卷

秦空(Java) 1085

黑猫带你学eMMC协议第9篇:eMMC初始化过程(initial)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 什么是emmc的初始化 对于小白来说,可能不太明白什么是emmc初始化。举个栗子:当你拿到一个电脑,接上电源,是不是就立马可以用了呢?并不是吧,你还需要去开机,等待电脑启动,配置完各种参数,等出现了电脑桌面,你才能用。那么同样,对于emmc芯片来说,也不是提供电源就能用了,需要输入各种命令后,让其进入到tran state后,才能正.

黑猫奥利奥的博客 6738

[转]C++学习小结 - 学习札记 - C++博客

导读:   关注此博客已经很久了,但是由于校园网的原因,导致无法快速访问,所以一直用抓虾在看,但是觉得还是有必要申请一个。我发现此博客上的技术性都很强,很值得学习。废话少说了,既然申请了此博客,全当c++学习的一个新的台阶吧。   此前,自己学习C++书看了不少。《C++ Primer Plus》 5th (当时以为是《C++ Primer》)是自己看的第一本C++的书籍,此书看得我头昏眼

674

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++学习记录小结

C++学习笔记(一) 1.公有成员 类可以访问, 类对象可以访问, 通过公有继承的派生类可以访问, 通过私有继承的派生类可以访问, 通过保护继承的派生类可以访问, 通过公有继承的派生类的对象可以访问, 通过私有继承的派生类的对象不可以访问, 通过保护继承的派生类的对象不可以访问。 2.私有成员 类可以访问, 类对象不可以访问, 通过公有继承的派生类不可以访问, 通过私有继承的派生类不可以访问, 通过保护继承的派生类不可以访问, 通过公有继承的派生类的对象不可以访问, 通过私有继承的派生类的对象不可以访问,

nowherehidingyou的博客 281

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ 学习小结

//c++中动态内存分配用new,C中用malloc //内联函数-- //函数重载 名字相同,参数个数或者参数类型不同,定义函数时最右边参数可以缺省 //缺省参数提高程序的可扩充性 //结构化程序设计没有封装和隐藏(接口) //面向对象程序设计 函数可重用性------程序规模大的时候 //面向对象程序设计 = 类+类+类++++类 //四大基本特点: 抽象 封装 继承 多态 //面向对象的程...

skylineGTR_yd的博客 271

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

我的c++学习小结

到了项目阶段,我把这些全用上了。说实话一开始我也没接触过它,边查边写,从建库建表、写增删改查的 SQL,到在 C++ 里用接口连接执行,再封装一层操作类,数据这才真正存得下来、查得出来。简单工厂配上策略模式,是我第一次真正体会到“面向接口编程”是啥感觉——想加个新功能,新写个策略类就行,原来的主逻辑一行都不用动,那种“对扩展开放、对修改关闭”的爽感,真的会上瘾。我刚进来那会儿,连指针都搞不太明白,写个类都磕磕绊绊,到现在能自己搭类模板、用智能指针、玩设计模式,还做了一个像模像样的项目,变化是真的大。

yolozy的博客 172

c++课程 学习小结

今天看了1-7章的c++,写一下个人认为c++和c不同的区别吧~~ c++和c的输入输出函数各具特色,但是以c++输入函数要慢一些。 尤其是对于字符数组的处理: 利用c++对字符数组的处理 #include<iostream> #include<string.h> using namespace std; int main() { cha...

161

学习c++小结

哎,人呀,我呀怎么这么懒呀,本打算一两天写下日记的,怎么叫日计,真图,新时期,新社会,新时代了,这不应叫日记了,应叫BLOG,什么叫BOLG,这个有很多解释,对应的到中国音译是博客,就是自己发表对某事,某人,某物的见简,吐出内心的高兴与烦恼,不要要任意一件事情压抑着,今天我写这vc++小结以是这样, 让大家不要放弃技术,不要觉得做技术的没有做管理的混得开,不管做那方面都一样,既有忧又有喜,只要你有

爱与狠 645

c++学习的小结

1.定义字符数组 ①char a[50]; ②cha a[] = { 0 }; 2.new和delete int *p = new int(100); delete p; char *p = new char[50]; delete[] p; 3.全局变量的实现 在一个.cpp文件中定义,然后在.h文件中声明,若其他的文件要使用该全局变量,加入指定的头文件即可。 4.定义类 类:成员变量+成员函数...

Wsx_calm的博客 195

一周C++学习小结

浑浑噩噩,磕磕绊绊地在C++这位新朋友的陪伴下走过了一周。          发现,一个崭新的向往已久的陌生世界展现在眼前。          长路漫浩浩,任重而道远。这是我选择的路。我会坚持而悠然地走下去。          短短一周的学习,皮毛的接触,就让我感觉到了C++这位新朋友深刻而丰富的内涵,也让我感到了自身的鄙陋与不足。小试牛刀,却错误与警告并出。不断地找错修改,面对着满屏的代码

xvkaixvan的专栏 817

C/C++ 学习小结

C/C++ 学习小结 static 关键字 多态 继承 封装 内存分配方式

LLLLLLLF的博客 238

对比C++来学习python基础的小结

简述历程 疫情期间因为这学期上C++课开始自学C++,去b占找到黑马程序员的C++教程自学,初步掌握了一些知识,后来在学校又学了细节全面的基础知识,刷很多编程题。最后因为实验室而借来同学学python的教材和网上搜黑马的教材自学python。 刚学过C++再去学Python有种手到擒来的容易感,或许是因为编译的语法可以大不一样,但编译的思想却一致,而且同时根据学Python时的不适感,更加强了我对分辨编译思想和编译语法的理解,前者是根本 是大体构架,后者是工具 是细节。 像:Python的判断语句循环语句那

m0_46471555的博客 458

ADC实战避坑指南:从采样原理到PCB接地的精度保障全链路

模数转换(ADC)是嵌入式系统连接物理世界的核心环节,其本质是将连续模拟信号按采样定理离散化,并通过量化编码生成数字量。实际工程中,理论分辨率与有效位数(ENOB)常存在显著差距,根源在于采样率与抗混叠滤波失配、输入阻抗驱动不足、参考电压噪声、模拟/数字地耦合干扰等系统级因素。高精度数据获取不仅依赖芯片参数,更取决于信号链整体设计——涵盖前端调理、采样保持、PCB布局、软件滤波及温度校准。本文聚焦12位ADC在STM32、ADS1115等主流方案中的典型失效模式,结合ENOB评估与AGND/DGND单点接地

weixin_33928137的博客 249
上一篇: 容器化技术
卜睵·-嗳
博客等级 码龄5年 76粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值