- 主题:c++太复杂了,我承认这几行代码我一辈子写不出来
这两个AI都没提64位seq用满了翻转的问题呢,其实也有解决方案,不过由于这是天文数字到不了,就没加这部分代码了。
【 在 z16166 的大作中提到: 】
: claude提出还有下面的问题:
: 1、这句也存在race,主要是wrap-around时。
: buffer_[idx] = new_value;
: ...................
--
FROM 171.221.52.*
你既然已经出来了14年的C++11都没兴趣了解,那我简单说一下自旋锁和std::atomic的关系吧。
自旋锁是基于std::atomic实现的同步原语,用于短临界区互斥。
std::atomic是更底层的原子操作工具,可直接用于无锁编程或构建高级同步机制(如自旋锁、无锁数据结构)。
不愿意了解和接受新技术,是一种衰老的表现。所以有时候衰老不仅表现在身体上,它还表现在思想上。
【 在 smartbear 的大作中提到: 】
: 才看到了你要干什么
: 真是服了,你弄个share_ptr 不就得了?加个自旋锁这点访问量有什么问题?
: 你弄这个大个内存,系统内存不要钱啊?
: ...................
--
FROM 171.221.52.*
为啥在楼主的标题下,讨论C++这个语言,你不是跑题到汇编,就跑题到挣钱上呢?
我不关心能不能挣钱,我十多年前就财务自由了,我不需要挣钱,开心就好。
【 在 smartbear 的大作中提到: 】
: 真是服了你了,我这几年搞得系统,业界基本独步 ,我们这些人压根不在乎什么新东西,我们在乎能不能赚钱,你懂吗?技术新不新无所谓,业界能不能领先,能不能赚钱才是关键。
--
FROM 171.221.52.*
说明你还是没看懂,又扯到内存申请和释放上了,或者完全没看,所以说的只是一个老年人在思维固化后,对C++新功能的刻板印象而已。
【 在 smartbear 的大作中提到: 】
: 你对C14确实比我熟,但是问题是你堆了一堆代码,用非常复杂的方法解决了一个非常简单的问题,程序运行开销远远不是你以为的atomic原子操作,windows申请释放内存就是带锁的,并且释放内存消耗很大。
: 所以不管是程序运行开销,软件系统可维护性,你这个方案都不如直接弄个share_ptr简单搞一下,几行代码。
: 所以,你说你对C14更了解,带来了什么?更高的运行耗时,运行内存,更高的维护成本,更复杂的系统逻辑。
: ...................
--
FROM 171.221.52.*
你的方案每次update都要从堆上分配,内存分配开销极大,而且地址不固定,缓存命中率很差,而且还有给堆增加大量碎片的副作用。而且每次还需要对引用计数归零的内存进行回收,又是额外的开销。
我的方案内存地址是固定的,可以一直被缓存,而且update没有内存分配,除非新字符串参数超过原先的std::wstring的预分配长度,才会进行一次缓冲区扩大。
实际上,你的方案比多线程加锁还慢。你随便问个AI就可以得到答案,比如你那个豆包。
一亿次只写的极限压力,两种做法的核心开销可以简化为:
A. std::make_shared<std::wstring>
≈ 1 次堆分配(对象+控制块一次性分配) + 1 次堆释放(旧块被 shared_ptr 原子减到 0 时) + 2 次原子修改(新块引用计数从 0→1,旧块从 1→0 并触发析构)
B. 对同一块字符串加锁后原地写入
≈ 1 次加锁/解锁(通常两条原子指令:lock xadd / mov) + 0 次内存分配
在现代 x86-64 Linux 上,实测数据(GCC13,-O3,Intel i7-12700):
malloc/free 一次 16-24 B 的块(std::wstring 空壳 + 控制块)≈ 35 ns
shared_ptr 原子增减一次 ≈ 5 ns
一次 uncontended std::mutex lock/unlock ≈ 15 ns
于是 1 亿次:
A 路:
(35 + 5×2) ns × 1e8 ≈ 4.5 s
B 路:
15 ns × 1e8 ≈ 1.5 s
结果:加锁原地写快 3 倍左右。
如果把字符串实际内容也考虑进去(>15 字节,SSO 失效),A 路还会再增加一次内部内存分配,差距继续拉大;而 B 路只多一次 memcpy,锁耗时不变。
因此,只写 1 亿次的极限场景,加锁原地更新显著快于不断 make_shared 并抛弃旧串。
【 在 smartbear 的大作中提到: 】
: 就事论事,我再老年人,也可以秒你,也不会写这么垃圾的代码,让豆包写一下,看看豆包听你的还是我的?都这年纪了,还没有学会就事论事,天天都扯西扯。
--
FROM 171.221.52.*
你那个每次内存分配,释放的方案就是这个豆包给你出的主意?哈哈
【 在 smartbear 的大作中提到: 】
: 豆包答案
--
FROM 171.221.52.*