从C++开源项目中学到的一些知识点,包括C++和并发方面的内容
内存对齐 之 alignas
在学习日志系统的环形缓冲区设计时,学到了C++11中的内存对齐关键字alignas
,于是查了一波资料。
参考blog:
字节对齐主要是为了提高内存的访问效率,比如intel 32位cpu,每个总线周期都是从偶地址开始读取32位的内存数据,如果数据存放地址不是从偶数开始,则可能出现需要两个总线周期才能读取到想要的数据,因此需要在内存中存放数据时进行对齐。
利用std::chrono获取当前时刻的精确到微秒的时间
| std::time_t time_now_us = std::chrono::duration_cast<std::chrono::microseconds>((std::chrono::high_resolution_clock::now().time_since_epoch())).count();
std::time_t time_now_s = time_now_us / 1000000; time_now_s += 28800; std::tm* time_now = std::gmtime(&time_now_s);
char buff[32], usbuff[7]; strftime(buff, 32, "%Y-%m-%d %H:%M:%S.", time_now); sprintf(usbuff, "%06llu", time_now_us % 1000000); cout << buff << usbuff << endl;
|
C++17利用内存池加速
| auto set_pmr = []{ static byte buffer [1 << 30]; static pmr::monotonic_buffer_resource pool {data(buffer), size(buffer)}; set_default_resource(&pool); return 0; }();
pmr::unordered_map<string, pmr::set<string>> mp[100]; pmr::unordered_map<string, pmr::set<string>> mp1[100];
|