c++ 计时器(支持多线程)
本项目能够对指定代码块或函数等进行计时,并利用Chrome tracing进行可视化
将InstrumentorTimer.h和InstrumentorMacro.h(可选的,一些宏定义)正确引入后。
Instrumentor::BeginSession("SessionName"); // Begin session
{
InstrumentationTimer timer("Profiled Scope Name"); // Place code like this in scopes you'd like to include in profiling
// Code Blocks
// timer.Stop(); ...
c++ shared_ptr 底层实现及线程安全相关
std::shared_ptr 是 ,用于管理动态分配的对象。它提供了引用计数的机制,允许多个 shared_ptr 共享同一个对象,并在不再需要时自动释放对象。
底层实现:
std::shared_ptr 的底层实现通常使用两个部分:一个控制块(control block)和一个指向实际对象的指针。控制块通常包含引用计数、指向对象的指针以及其他辅助信息。当创建一个 shared_ptr 对象时,控制块会被动态分配,并将引用计数初始化为 1。每当有一个新的 shared_ptr 对象指向相同的对象时,引用计数就会增加。当引用计数减少到零时,控制块会负责释放对象的内存。
线程安全性:
std::shared_ptr 的默认实现在引用计数的增加和减少操作上是线程安全的。这意味着多个线程...
memory align 内存对齐机制
引入
内存对齐
eigen相关的内存对齐踩坑
参考
https://www.bilibili.com/video/BV1aV4y1y7Sd/
https://www.bilibili.com/video/BV1ZV4y1t7jj/
c++ stl unordered_map 的扩容机制
gcc的扩容机制
https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/src/c++11/hashtable_c++0x.cc#L104
gcc 的做法是按 growth_factor (=2) 来扩容,
if (__n_elt + __n_ins > _M_next_resize)
{
// If _M_next_resize is 0 it means that we have nothing allocated so
// far and that we start inserting elements. In this case we start
// with an ini...
url输入网址,到渲染页面,发生了什么
当用户在浏览器的地址栏中输入一个URL(网址)并按下回车键后,以下是通常发生的步骤:
URL解析:浏览器会解析URL,将其分解成几个组成部分,包括协议(如HTTP、HTTPS)、域名(或IP地址)、端口号、路径和查询参数等。
DNS解析:浏览器将解析出的域名发送给DNS服务器,以获取对应的IP地址。DNS服务器将返回与域名对应的IP地址,供浏览器后续使用。
建立TCP连接:浏览器使用获取到的IP地址和端口号,与服务器建立TCP连接。这是通过三次握手来确保客户端与服务器之间的可靠连接。
发起HTTP请求:一旦TCP连接建立,浏览器会发送HTTP请求。请求包括请求方法(如GET、POST)、请求头(包含用户代理、...
从socket的角度解释TCP的连接建立过程
TCP连接建立过程可以分为三个阶段,分别是:建立连接阶段、数据传输阶段和关闭连接阶段。下面从socket的角度解释TCP连接建立过程:
建立连接阶段:
在socket编程中,当客户端调用connect函数时,会向服务器发送一个SYN包,表示请求建立连接。服务器收到SYN包后,会回复一个SYN+ACK包,表示同意建立连接,并告诉客户端自己的序列号。客户端收到SYN+ACK包后,会回复一个ACK包,表示确认建立连接,并告诉服务器自己的序列号。此时,TCP连接建立成功,可以进行数据传输。
数据传输阶段:
在socket编程中,当客户端调用send函数发送数据时,数据会被分成多个TCP报文段进行传输。每个TCP报文段都会带有序列号和确认号,用于保证数据的可靠传输。服务器收到数据后,会发送一...
cpp17 新特性string_view
引入
单独的头文件<string_view>
实现
只读的,指针+ 长度, 不拥有内容
immutable, light weight (pointer + size), does NOT own the content.
struct string_view {
const char* data;
size_t length;
}
libstdc++-v3/include/std/string_view
使用
most interfaces remain the same as std::string, e.g. [], begin, at, back, data 大部分操作和std::string 一致
findsubstr O(1) s...
共计 90 篇文章,12 页。