小编Rol*_*zin的帖子

CMake缓存变量与全局属性:使用变量值的简单语法

要使值从子目录中可用于整个CMake环境,可以使用set(VARIABLE_NAME Value CACHE INTERNAL "")语法设置缓存变量或使用语法设置全局属性set_property(GLOBAL PROPERTY VARIABLE_NAME Value)(另请参阅关于CMake中变量的非常好的答案).

使用后者的优点是,您不会为CMake缓存"污染"它未设计的内容,并且在不使用FORCE参数时您不依赖于被删除的缓存.

但是使用变量值的语法不是用户友好的,因为您必须使用get_property而不是简单地使用${...}表示法来检索值.

是否有更简单的语法来代替get_property(某种语法糖)?

properties global-variables cmake

5
推荐指数
1
解决办法
3776
查看次数

允许堆在短期范围内分配对象以确保内存碎片的自由

我们在嵌入式系统环境中使用C++,基本上不需要任何类型的动态内存分配(例如,参见嵌入式应用程序中的内存管理资源,原因我们没有这样做).我们仍然不想没有一些很好的基于C++的功能,如STL容器和std :: string.对于第一个,我们在初始化时保留特定的大小,不会让容器超出其容量.对于后者(std :: string),我对如何"安全地"使用它们持怀疑态度,因为它们有时会在堆上分配内存.

但是,我发现使用std :: string(通常是堆分配对象的其他方式)似乎很好:我将对象本身分配到堆栈上(在{}我说话的某个范围内)来自C++)并允许它们分配堆,前提是它们在超出范围时实际释放所有保留的内存.

我知道这种方法并不能保证内存碎片的自由,但我觉得如果手头的范围是短暂的,这实际上会导致在范围结束后连续的空闲内存.

我还怀疑当多个任务共享相同的堆但仍然是空闲内存时最终可能存在问题,只要手头的范围都是短暂的(例如不阻塞).或者,我可以接受只允许一个任务在堆上分配内存,而其他任务实际上不重要.

我建议的堆分配对象的用法是否有效?有人有另一种策略(部分)启用动态内存分配而不会有内存碎片的风险吗?

c++ embedded heap stack memory-fragmentation

4
推荐指数
1
解决办法
533
查看次数