VxWorks上STL的效率

C++职业规划:Qt框架学习与主流就业市场需求分析 C++作为高性能系统编程的核心语言,其技术选型与职业路径规划是开发者面临的关键决策。从语言特性与标准库(STL)的原理出发,现代C++通过RAII、智能指针、lambda表达式等机制实现了资源安全与高效抽象,其技术价值在于构建高性能、低延迟的后端服务与系统软件。在应用场景上,互联网后端开发、游戏引擎、基础架构等领域更侧重于网络编程、并发模型与算法优化,而跨平台GUI开发则需专门的框架支持。本文聚焦Qt框架,分析其在工业控制、嵌入式GUI等领域的优势,并对比主流C++岗位(如后端开发、系统编程)的核心技能需求 阅读详情

沉醉于STL强大的功能及其中的泛型编程思想,在VxWorks上写程序时使用了STL,一切都正常,除了在最后做性能测试时根本不相信程序怎么会那么慢。

为此,专门编写了下面的小程序做对比测试。先看测试结果:

TestMap    last: 201
TestVector last: 116
Test       last: 2
另外,还要注意生成的.o文件的大小:
只有test:   38K
包含MAP:    98K
包含VECTOR:  68K
(按照VxWorks FAQ上所说,在编译时加入了-fno-exceptions -fno-rtti,似乎没有效果)

测试程序如下:

#include <map>
#include <vector>
#include <cstdio>
#include "tickLib.h"

using namespace std;

#define TEST_MAP
#define TEST_VECTOR

#ifdef TEST_MAP
int TestMap()
{
    map<int, int> test_map;

    test_map.insert(make_pair(1, 111));
    test_map.insert(make_pair(2, 222));
    test_map.insert(make_pair(3, 333));

    map<int, int>::iterator it = test_map.find(3);
    int ret = (*it).second;
    //printf("%d/n", ret);
    return 0;
}
#endif

#ifdef TEST_VECTOR
int TestVector()
{
    vector<int> test_vec;
    test_vec.push_back(111);
    test_vec.push_back(222);
    test_vec.push_back(333);

    vector<int>::iterator it = test_vec.begin();
    for( ; it != test_vec.end(); ++it) if (*it == 333);
    return 0;
}
#endif

int test()
{
    int arr[5];

    arr[0] = 111;
    arr[1] = 222;
    arr[2] = 333; 

    for (int i = 0; i < 3; i++) if (arr[i] == 333);
    //printf("%d/n", arr[2]);
    return 0;
}


int main()
{
    int i, num = 100000;

#ifdef TEST_MAP
    int map_tick = tickGet();
    for (i = 0; i < num; i++)
        TestMap();
    printf("TestMap last: %d/n", tickGet() - map_tick);
#endif

#ifdef TEST_VECTOR
    int vec_tick = tickGet();
    for (i = 0; i < num; i++)
        TestVector();
    printf("TestVector last: %d/n", tickGet() - vec_tick);
#endif

    int base_tick = tickGet();
    for (i = 0; i < num; i++)
        test();
    printf("Test last: %u/n", tickGet() - base_tick);
}
得到这个结果令人沮丧无比。不过,怎么可能这么慢呢?而且编译的为什么会那么大?

仔细想想,泛型编程中用到了大量的模板,模板虽不会像宏替换那样“简单”,但是,每次实例化一种容器,相当于用此实例,将容器的实现全部宏替换一下。这也是为什么使用模板定义的类只能在头文件中:它只是广义的类型(包括实现代码)。(我并没有深入了解模板的具体实现,只是推测)

这或许可以解释编译出的文件大,但为什么会那么慢呢?至少,Vector不应该那么慢吧?关于STL的效率,有句话是这么说的:它的效率与你自己实现时的效率一样。再仔细看程序,在push_back中,STL需要使用allocator分配内存;begin,end是两次函数调用。这些操作产生这样的效率应该不算不合理。

STL是个好东西,但是,并不是任何情况下它都是想要的那样。

使用Qt编程的一点感悟 Qt诞生于1991,也是个90后。它是一个支持跨平台(Windows、Linux、macOS、Android、嵌入式OS等)的C++图形用户界面框架,Qt提供了统一的API来处理文件I/O、网络通信、数据库访问等底层操作,屏蔽了Windows、Linux、macOS等不同操作系统的差异,这使得开发者可以专注于业务逻辑而非平台适配,使用Qt Creator拖拽式开发C++窗体程序,大大提高了C++桌面软件的开发效率,应对中小型软件开发游刃有余,个人感觉比微软VC+MFC更容易上手。 阅读详情

相关推荐

库卡机器人入门:核心概念、坐标系与KRL编程实践指南

工业机器人作为自动化产线的核心执行单元,其运动控制依赖于精确的坐标系系统与参数配置。理解世界坐标系、基坐标系和工具坐标系(TCP)是机器人精准定位的基础,其中工具坐标系的正确标定直接关系到末端执行器的作业精度。在工程实践中,负载数据的准确设置对于机器人动力学计算和运动平稳性至关重要。通过掌握这些核心概念与数据配置,并结合KRL(KUKA Robot Language)进行运动指令(如PTP、LIN)编程与逻辑控制,工程师能够高效完成搬运、焊接等常见任务。本文以库卡(KUKA)机器人为例,系统梳理了从系统架构

weixin_34252090的博客 422

VxWorks系统产生map文件

VxWorks,map文件

harhy的专栏 625

Linux C/C++ 进阶实战:从系统编程到高性能服务开发

系统编程是理解计算机如何运行的核心,它涉及进程、线程、内存管理和I/O等底层机制。其原理在于操作系统通过抽象硬件资源,为应用程序提供稳定、安全的执行环境。掌握系统编程的技术价值在于能够开发出高性能、高可靠性的软件,如数据库、Web服务器和分布式系统。应用场景广泛,涵盖后端服务、AI基础设施和嵌入式开发等领域。本文聚焦于Linux C/C++开发,通过构建HTTP服务器、线程池等实战项目,深入讲解epoll、内存池等关键技术,帮助开发者从原理到实践,系统提升在高性能计算和系统软件领域的工程能力。

weixin_34199335的博客 432

VxWorks上的STL错误

我在程序中使用了STL,但是下载时,出现了链接错误: Errors while downloading PPCEC603gnu/Project1.out: clone__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b1i03Rep eos__t18string_char_traits1Zc re

C++舞者 3837

AI时代C++就业指南:2026年四大黄金赛道与技能重构

在计算机编程领域,高性能计算和系统级开发是支撑现代数字基础设施的核心技术。其原理在于通过直接管理硬件资源、优化内存与计算效率,实现对底层算力的极致利用。这种技术价值在需要毫秒级响应、高吞吐量和确定性的关键系统中无可替代,例如实时交易、物理仿真和边缘计算等场景。随着人工智能技术的普及,AI基础设施、自动驾驶、游戏引擎和金融科技等领域对底层性能的要求不降反升,这自然将我们的焦点引向C++——这门在性能与控制力上拥有独特优势的语言。现代C++通过智能指针、移动语义等特性提升了开发效率,而CUDA并行计算、实时系统

weixin_34343000的博客 312

VxWorks编译文件和链接文件的配置-GNU Make

VxWorks编译文件和链接文件的配置-GNU Make.pdf

c++程序在vxworks上编译运行,也能运行出正常结果吗

然后,在VxWorks上运行这个二进制文件,你应该能够看到你的C++程序按照预期执行,并产生正确的结果。首先,你需要确保你的C++代码是符合标准的,并且没有使用任何VxWorks不支持的特定库或特性。此外,你也需要为VxWorks准备适当的交叉编译环境,以便生成可以在VxWorks目标平台上运行的二进制文件。总的来说,只要你的C++代码是标准的并且与VxWorks兼容,同时你使用了正确的编译和链接工具,那么你的程序在VxWorks上编译运行并产生正常结果是完全可能的。

slty_123的博客 471

vxworks学习经验,vxworks入门,C,C++

关于vxworks学习的一些心得体会 关于如何去学习vxworks 有一个大概的介绍!

VxWorks 操作系统学习笔记

1.       任务VxWorks任务:在执行时每个程序都被称之为任务。VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境。 (1)    任务状态:就绪(READY):该状态时任务仅等待CPU的状态,不等待其他任何资源。阻塞(PEND):任务由于一些资源不可用而被阻塞时的状态。睡眠(DELAY

menuconfig的专栏 1万+

Workbench3.0 VXWORKS 6.X 环境使用学习

《Workbench3.0&VXWORKS6;.6集成环境使用指导》.ppt MPC8377硬件环境下vxworks仿真的建立过程.doc 风河Woorkbench3.0_VxWorks6.6应用程序开发使用说明V1.0.doc

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 377

VxWorks 内存分配效率问题

现象描述: SMP下 RTP程序跑在Core 4核的处理器上,测试RTP程序内创建了1000个任务(线程),每个任务会有一些涉及到内存申请(malloc)和释放(free)的操作,如STL vector的操作(任务间无互斥,vector为栈上对象),测试下来查看CPU占用率大概在30%左右,cpu spy查看4核CPU负载,明显地,CPU 0 出现了较高负载现象,其余核心负载较低。Suspend所有任务查看堆栈,发现几乎所有任务都在等待同一个互斥信号量,这个互斥信号量是VxWorks内部Mem

chenzhjlf的专栏 1429

GPS卫星轨道的理论和计算笔记分享

广义相对论预测,对比在时空弯曲度较大的地面上的原子钟,运行于时空弯曲度较小的卫星原子钟在地面上看起来更快,每天快约45us;反过来,当电压施加在晶体上时,晶体形状会扭曲(比如说伸长),而当晶体被施加上反向电压后,它将做相反的变形运动(比如缩短)。X轴:指向参考子午面与地球赤道的一个交点;从北黄极上方观察,地球北极在空间的运动轨迹是一个近似于以北黄极为中心的顺时针方向旋转的圆周,圆周半径等于。从上万年周期看,地球北极绕北黄极做大圆周运动,而从几年的短期来看,北极又在某一点处做局部的小幅椭圆运动。

m0_57139844的博客 2004

Stl(标准模板库)

Stl(标准模板库) STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset。 1.简单概括: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector(类似数组); 2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用list(类似指针); 3、如

caicaptain 624

Abel逆变换及其求解方法

Abel逆变换常应用在轴对称的、光学薄的火焰、羽流或等离子体重建。

weixin_49783507的博客 8372

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 491

初识STL vector

vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适

drrlalala的专栏 739

R语言绘制森林图

运行上述代码后,将会生成一个标题为"森林图示例"的森林图。通过以上代码示例,你可以根据自己的数据集和需求创建定制的森林图。在实际应用中,你还可以进一步调整图形的样式,添加图例、坐标轴标签等,以使森林图更加美观和易于理解。在数据可视化领域,森林图是一种常用的图形类型,用于展示多个分类变量之间的关系。本文将介绍如何使用R语言创建森林图,并提供相应的源代码示例。森林图通常由垂直的线段表示不同类别的观测值,并且线段的长度表示数值变量的大小。上述代码中,我们为不同的类别分别指定了蓝色和红色作为颜色映射关系。

TechNovaX的博客 1045

嵌入式软件测试(十三)——数据竞争检测方法分析

本文探讨了嵌入式系统中数据竞争的成因、危害及应对策略。数据竞争指多个线程在未同步情况下并发访问共享内存(至少一个为写操作),可能导致系统崩溃、数据损坏等严重后果。检测方法包括:静态分析(早期筛查但误报率高)、动态分析(如ThreadSanitizer,准确性高但需运行时支持)和形式化验证(数学严格但复杂度高)。实践建议包括:最小化共享状态、正确使用原子操作/锁、分层测试策略(宿主机TSan检测+目标机压力测试),并将工具集成到开发流程中。通过设计优化、规范同步机制和多层次验证,可显著降低嵌入式系统的数据竞争

Dr.kangder的博客 422

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

嵌入式开发薪资大涨背后:技术栈演进与产业需求共振

嵌入式系统作为连接物理世界与数字世界的核心技术,其价值正随着产业智能化升级而重塑。从基本原理看,嵌入式开发涉及硬件架构、实时操作系统和底层驱动编程,是物联网、智能设备等领域的基石。随着智能汽车、边缘计算和芯片国产化浪潮的推进,技术价值凸显在解决复杂系统集成和高性能计算需求上。应用场景已从传统工业控制扩展到自动驾驶域控制器、AIoT设备及高端芯片生态建设。在此背景下,掌握嵌入式Linux开发环境搭建、Rust语言开发嵌入式等现代技术栈成为人才竞争关键,直接推动了市场对复合型人才的需求爆发与薪资结构性上涨。

weixin_30561177的博客 343

(6)APB总线协议 —— 逻辑梳理(0.1认知)

这篇大家就差不多看看就行

CAUC_learner的博客 2702

Qt开发入门:从零到跨平台GUI低手

Qt开发入门:从零到跨平台GUI低手

Yusei_0523的博客 619

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VxWorks常用函数

1.taskSpawn 创建(产生并激活)新任务    int taskSpawn    (    char *name,    int priority,    int options,    int stackSize,    FUNCPTR entryPt,    int arg1,    int arg2, int arg3,    int arg4, int ar

xiaocheng98的专栏 8655

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: VxWorks上的STL错误
下一篇: 踏入社会(http://www.sysinfo.cn/index.php?action=show&id=90)
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值