我想知道标准库排序算法(例如std :: sort)是否正在使用堆内存进行排序.
有没有可靠的来源如何找出排序算法或任何标准库算法通常使用的是什么类型(堆,堆栈)和多少临时内存?
背景是我考虑将一些标准库算法引入嵌入式环境,其中受控的内存使用是至关重要的.(尤其不应使用堆).
先感谢您!
我正在开发一个嵌入式应用程序,我喜欢使用像这样的容器std::vector<>.不幸的是我不能使用堆.所以std::vector<>无法使用.所以我正在寻找替代方案.
我见过提升,static_vector但就我所见,升压方法对于微控制器来说似乎太重了.或者是否有使用小型微控制器上升压的经验(例如只有static_vector?)
可以做出一个假设:在整个应用程序运行时期间的最大条目数在编译时是已知的.
所以我想知道是否有任何开源解决方案,或者我是否必须自己实现一个基于实现的容器,std::array<>并添加一些逻辑来启用以下操作:
在运行时期间添加(push_back())和remove(erase())元素.提供典型的容器迭代器和随机访问.还for ( : )应该提供短手循环.
所以我的天真方法是:
提供迭代器和随机访问对我来说似乎很容易,而且应该主要基于std::array<>函数
某些逻辑应该添加add(push_back)和remove(erase)应该没有问题.
但是如何for ( : )实现循环支持?
还有其他我需要考虑的事情吗?
我想知道静态对象上的智能指针是否合理.例如,假设我有一些静态资源,并希望将对该静态资源的引用传递给需要使用这些资源的其他对象.
一种方法是使用指向该资源的RAW指针.但现在我想知道智能指针(shared_ptr)是否是更好的方法,如果是这样,如何正确地做到这一点.(智能指针也应该是静态的吗?).
问题的背景:如果没有更多的对象持有智能指针,智能指针指向的静态对象将被释放(这不是最好的想法......).
一个例子(在运行结束时以崩溃结束):
struct SomeType {
SomeType() { cout << "ctor..." << endl; }
~SomeType() { cout << "dtor..." << endl; }
void sayHello() { cout << "Hello!" << endl; }
};
void someFunction(shared_ptr<SomeType> smartPointer) {
smartPointer->sayHello();
}
static SomeType st;
static shared_ptr<SomeType> pt{ &st };
void anotherFunction() {
someFunction(pt);
}
int main() {
anotherFunction();
cin.get();
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个std::array<SomeType, N>并且我想调用一个函数,它使用迭代器来处理对象,std::array但不知道容器是什么std::array.
SomeType是一个具有公共成员函数doSomething()的类
例如,函数可能是:
template<typename Iterator>
void action(Iterator &beg, Iterator &end) {
for (; beg != end; ++beg)
beg->doSomething();
}
Run Code Online (Sandbox Code Playgroud)
通过以下方式调用此功能:
int main() {
std::array<SomeType, 10> a;
action<std::array<SomeType, 10>::iterator>(a.begin(), a.end());
}
Run Code Online (Sandbox Code Playgroud)
但我想知道这是不是这样做的?特别是因为模板可以用于每个类.有没有办法限制功能,SomeType而不让功能知道容器是一个std::array?