- 主题:msvc 的链接库还在分单线程和多线程?
现在还有人使用单线程?
--
FROM 183.253.146.*
有啊
【 在 hgoldfish 的大作中提到: 】
: 现在还有人使用单线程?
--
FROM 114.241.91.*
即使你自己使用单线程,但用第三方库的话,一般都是要求你采用 /Md 链接吧?
【 在 marxn 的大作中提到: 】
: 有啊
--
FROM 124.72.109.*
vs2019和vs2022没这个选项了吧
很久以前,MS有个组策略管理的dll是单线程的CRT,在调用这个dll的任何接口之前都得先加锁。
--
FROM 114.240.244.*
【 在 z16166 的大作中提到: 】
: vs2019和vs2022没这个选项了吧
: 很久以前,MS有个组策略管理的dll是单线程的CRT,在调用这个dll的任何接口之前都得先加锁。
晕, 你这c++学的真是堪忧
楼主的说法,标准一点应该叫,运行时库分单线程和多线程。
尽管进程的堆上的内存地址在整个进程都是有效的, 都可以访问,
但是, 内存的分配和释放设计堆管理, 除非分配和释放是原子操作,
否则, 多线程会导致管理数据不一致,假如, 分配内存需要修改五个变量, 刚修改2个,
另一个线程的内存分配调用也来了,会导致这5个变量修改次数不一,程序就可能崩溃了
多线程的运行时库则会在数据访问的时候使用锁或其它手段进行保护, 以保证原子性。
单线程运行时库在不需要这些机制, 内存分配更简单,理论上内存分配性能更好。
--
FROM 124.126.3.*
【 在 poggy 的大作中提到: 】
:
: 晕, 你这c++学的真是堪忧
: 楼主的说法,标准一点应该叫,运行时库分单线程和多线程。
: ...................
当然,运行时库里面还有很多其它东西, 内存管理只是一小部分。
--
FROM 124.126.3.*
你看过vs2019和vs2022里的相关选项了没?我是看过了才回帖子的。
现在只有四个:/MT、 /MTd、 /MD、 /MDd
VC6时代是有/ML、/MLd的,这两个选项是从VS2005 SP1移除的,
也就是说谁要是现在还想用单线程CRT,那必须用老古董的VS版本才行。
The following features were new in Visual C++ 2005 Service Pack 1:
/ML and /MLd compiler options have been removed. Visual C++ no longer supports single-threaded, statically linked CRT library support.
https://learn.microsoft.com/en-us/cpp/porting/visual-cpp-what-s-new-2003-through-2015?view=msvc-170
单线程CRT里的malloc()在调用HeapAlloc()时指定了HEAP_NO_SERIALIZE标志的,也是为了效率,disable掉HeapAlloc内部的锁。
这是以前分析某个产品多线程调用那个组策略dll的崩溃时注意到的。
【 在 poggy 的大作中提到: 】
:
: 晕, 你这c++学的真是堪忧
: 楼主的说法,标准一点应该叫,运行时库分单线程和多线程。
: ...................
--
修改:z16166 FROM 114.240.244.*
FROM 114.240.244.*