使用具有移动语义的C ++ 11-不使用标准库(以及Boost.smart_ptr)

问题描述 投票:0回答:1

我正在将嵌入式软件与Zephyr RTOS和STM32 Nucleo系列(Cortex M4 / 0)等ARM嵌入式微控制器一起使用。

最近,由于最新版本的Zephyr对C ++的支持进行了重大改进,因此我正在考虑从C开发转向现代C ++。

默认情况下,Zephyr包含C标准库,但不包含Cpp的STD。

Zephyr实际上添加了对Cpp标准库的可选支持,这似乎工作得很好。但是,它需要大量的闪存使用量(没有我的代码的话,接近我的微控制器闪存的65%!)。

因此,我正在尝试寻找其他方法来使用现代C ++,而没有实际的标准库(包括内存/实用程序标头)。

我已经考虑过将Boost.smart_ptr用于智能指针,但是我想知道如何使用移动语义(std :: move)。

我应该使用Boost.Move模块吗?即使我使用的是C ++ 1x而不是C ++ 0x?

我应该使用direct cast from T& to T&&自己实现移动语义吗?

c++11 move-semantics boost-smart-ptr zephyr-rtos boost-move
1个回答
0
投票

我刚刚发现了导致STD大量使用Flash的原因。

在我的情况下,它包含<iostream>标头(用于std::cout),没有它,即使使用std容器,闪存的使用也足够合理。

所以我想它解决了我的问题,我现在可以使用C ++ STD。

(无论如何都在嵌入式环境<iostream>中使用is a bad idea,要进行打印,只需使用printf

© www.soinside.com 2019 - 2024. All rights reserved.