标题已经很明确了。这是一个非常简单的问题。我认为它是O(n),但想在明天的最终考试前再次确认一下。
标题已经很明确了。这是一个非常简单的问题。我认为它是O(n),但想在明天的最终考试前再次确认一下。
vector
作为成员,则默认析构函数是非平凡的,并且即使没有显式定义析构函数,它也会运行。 - Duncan我同意这取决于情况,但是让我们只谈论如何释放X字节的内存而不用担心析构函数。
一些内存分配器为“小”(1到500字节)对象保留了空闲列表。向列表插入元素是O(1)操作。如果所有线程都使用一个自由列表,则需要获取互斥锁。获取互斥锁通常需要进行数千次“旋转”,然后可能会调用系统调用(非常昂贵)。一些分配器使用线程本地存储的自由列表,因此无需获取互斥锁。
对于中等大小(500到60000字节)的对象,许多分配器将进行块合并。也就是说,它们会检查相邻的块是否也是空闲的,并将2或3个空闲块合并为1个更大的空闲块。合并是O(1)操作,但是再次需要获取互斥锁。
对于大块,一些分配器使用系统调用获取内存。因此,释放内存也是一种系统调用。
std::string::~string()
- Mooing Duckn
是什么? - Kerrek SB