T********i 发帖数: 2416 | 1 几十万行代码,涉及内存分配释放的可以不到100行。
Cpp container质量一流,种类齐全。完全不手动分配都有可能。
当然访问越界还是会死人的。这个只能靠自觉。
我感觉,从代码量看,各种语言,包括C/Cpp,完成相同工作,代码量基本差不多。并
不是Cpp要多写代码。
反正我是把C和Cpp区别对待的。连命名风格都不一样。 |
a*****g 发帖数: 19398 | 2 C的内存真是要命了
从前做裸机才明白这里的奥秘也练就了一身本事
【在 T********i 的大作中提到】 : 几十万行代码,涉及内存分配释放的可以不到100行。 : Cpp container质量一流,种类齐全。完全不手动分配都有可能。 : 当然访问越界还是会死人的。这个只能靠自觉。 : 我感觉,从代码量看,各种语言,包括C/Cpp,完成相同工作,代码量基本差不多。并 : 不是Cpp要多写代码。 : 反正我是把C和Cpp区别对待的。连命名风格都不一样。
|
h****e 发帖数: 2125 | 3 现在关心的不是内存管理或者代码量,而是谁坑少和开发效率高。
【在 T********i 的大作中提到】 : 几十万行代码,涉及内存分配释放的可以不到100行。 : Cpp container质量一流,种类齐全。完全不手动分配都有可能。 : 当然访问越界还是会死人的。这个只能靠自觉。 : 我感觉,从代码量看,各种语言,包括C/Cpp,完成相同工作,代码量基本差不多。并 : 不是Cpp要多写代码。 : 反正我是把C和Cpp区别对待的。连命名风格都不一样。
|
b*******s 发帖数: 5216 | 4 也还好,只是把不适合这个语言的放给新的语言去做而已了
rust现在学习曲线也越来越陡 |
g****t 发帖数: 31659 | 5 C越界问题第一麻烦。需要一定时间习惯培养。
除了我个人经验以外。以前HN我记得有个统计结果。
内存管理可以学会,也有一些工具可以给帮助。
较短时间内应该可以培训。
所以之前我讲过,写java的转不了C。
至少我未听闻过。原因在各种越界,乱飞指针,etc。
【在 T********i 的大作中提到】 : 几十万行代码,涉及内存分配释放的可以不到100行。 : Cpp container质量一流,种类齐全。完全不手动分配都有可能。 : 当然访问越界还是会死人的。这个只能靠自觉。 : 我感觉,从代码量看,各种语言,包括C/Cpp,完成相同工作,代码量基本差不多。并 : 不是Cpp要多写代码。 : 反正我是把C和Cpp区别对待的。连命名风格都不一样。
|
x****u 发帖数: 44466 | 6 好吧,你用C++写这个试试,看看代码量和C#差多少倍
异步读一个restful API,结果解析为JSON,添加一个对象后再异步写入磁盘
【在 T********i 的大作中提到】 : 几十万行代码,涉及内存分配释放的可以不到100行。 : Cpp container质量一流,种类齐全。完全不手动分配都有可能。 : 当然访问越界还是会死人的。这个只能靠自觉。 : 我感觉,从代码量看,各种语言,包括C/Cpp,完成相同工作,代码量基本差不多。并 : 不是Cpp要多写代码。 : 反正我是把C和Cpp区别对待的。连命名风格都不一样。
|
x****u 发帖数: 44466 | 7 现在像样点的板子都支持安卓和python了,屠龙之技没处用了
【在 a*****g 的大作中提到】 : C的内存真是要命了 : 从前做裸机才明白这里的奥秘也练就了一身本事
|
T********i 发帖数: 2416 | 8 我来写,30行CPP吧。真正干活儿的也就10行以内而已。
: 好吧,你用C 写这个试试,看看代码量和C#差多少倍
: 异步读一个restful API,结果解析为JSON,添加一个对象后再异步写入磁盘
【在 x****u 的大作中提到】 : 现在像样点的板子都支持安卓和python了,屠龙之技没处用了
|
x****u 发帖数: 44466 | 9 干活的是std::system(....)
【在 T********i 的大作中提到】 : 我来写,30行CPP吧。真正干活儿的也就10行以内而已。 : : : 好吧,你用C 写这个试试,看看代码量和C#差多少倍 : : 异步读一个restful API,结果解析为JSON,添加一个对象后再异步写入磁盘 :
|
T********i 发帖数: 2416 | 10 说人话很难么?简直不理解你这种人。。。
: 干活的是std::system(....)
【在 x****u 的大作中提到】 : 干活的是std::system(....)
|
|
|
m*****p 发帖数: 39 | 11 MCU了解下,RTOS重啓只需要幾毫秒,你安卓和python辦得到嗎?主力編程語言是Cpp14
,純C的很囉嗦。
: 现在像样点的板子都支持安卓和python了,屠龙之技没处用了
【在 x****u 的大作中提到】 : 干活的是std::system(....)
|
m*****p 发帖数: 39 | 12 感覺Cpp的STL庫沒有JDK好,分佈計算能力低,既不是thread safe,也不是reentrant
safe,需要用第三方庫,搞得很複雜,Cpp23才部分改善。因為for循環有N種寫法,各
種花樣,分布式很容易出錯。編譯器也N多,編譯參數上百,需要科班計算機才知道區
別。
但是Cpp是很多高性能領域的唯一選擇,逐漸變成DSL。 |
T********i 发帖数: 2416 | 13 毛病多了去了,比如C++ STL fstream会leak file descriptors.
打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak到child
process里面。
这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那都是10
多年的老kernel了。C++20也是一个鸟样。因此对于我来讲fstream永久不可用。当然对
于别人可能是另外的情况。
这些,永远不会有人告诉你。你要先带着问题去找答案,还不是很容易能找到。
reentrant
【在 m*****p 的大作中提到】 : 感覺Cpp的STL庫沒有JDK好,分佈計算能力低,既不是thread safe,也不是reentrant : safe,需要用第三方庫,搞得很複雜,Cpp23才部分改善。因為for循環有N種寫法,各 : 種花樣,分布式很容易出錯。編譯器也N多,編譯參數上百,需要科班計算機才知道區 : 別。 : 但是Cpp是很多高性能領域的唯一選擇,逐漸變成DSL。
|
n******n 发帖数: 409 | 14 现在内存还是个事吗?cloud 里的vm几秒钟给你调到几千个G. |
n******t 发帖数: 4406 | 15 那基本上就是printf("2000G"),你想要多少都行。
【在 n******n 的大作中提到】 : 现在内存还是个事吗?cloud 里的vm几秒钟给你调到几千个G.
|
p***o 发帖数: 1252 | 16 JDK连个大数组都不支持,写Unsafe跟写C没啥区别。
reentrant
【在 m*****p 的大作中提到】 : 感覺Cpp的STL庫沒有JDK好,分佈計算能力低,既不是thread safe,也不是reentrant : safe,需要用第三方庫,搞得很複雜,Cpp23才部分改善。因為for循環有N種寫法,各 : 種花樣,分布式很容易出錯。編譯器也N多,編譯參數上百,需要科班計算機才知道區 : 別。 : 但是Cpp是很多高性能領域的唯一選擇,逐漸變成DSL。
|
p***o 发帖数: 1252 | 17 iostream这种30多年前的烂设计,除了课本真有人用?
child
10
【在 T********i 的大作中提到】 : 毛病多了去了,比如C++ STL fstream会leak file descriptors. : 打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak到child : process里面。 : 这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那都是10 : 多年的老kernel了。C++20也是一个鸟样。因此对于我来讲fstream永久不可用。当然对 : 于别人可能是另外的情况。 : 这些,永远不会有人告诉你。你要先带着问题去找答案,还不是很容易能找到。 : : reentrant
|
g****t 发帖数: 31659 | 18 Lots of
"#include "
can be found in github projects.
【在 p***o 的大作中提到】 : iostream这种30多年前的烂设计,除了课本真有人用? : : child : 10
|
p***o 发帖数: 1252 | 19 很多学生把作业放到github上好在简历里充数 ...
【在 g****t 的大作中提到】 : Lots of : "#include " : can be found in github projects.
|
h****e 发帖数: 2125 | 20 某些hedge fund里面的trading platform还直接call呢
【在 p***o 的大作中提到】 : iostream这种30多年前的烂设计,除了课本真有人用? : : child : 10
|
|
|
T********i 发帖数: 2416 | 21 绝大多数都要跟着标准走。
自己的类,都要overload一个iostream的序列化方法呢。
不敢说99%,90%以上是这样的。。。
【在 p***o 的大作中提到】 : iostream这种30多年前的烂设计,除了课本真有人用? : : child : 10
|
l*******m 发帖数: 1096 | 22 c/c++是设计给懂os的人用的。所谓的坑都和系统有关。所为新语言的新特性都是把os
的东西包一下。现在的语言是设计尽量降低os的门槛。 |
n******t 发帖数: 4406 | 23 UNIX本來 fork和exec就是兩個事情。一般來說,fork之後在exec前是要做一堆事情的。
這個情況,exec前關掉不需要的文件描述符就完事了,O_CLOEXEC省點事情而已。
child
10
【在 T********i 的大作中提到】 : 毛病多了去了,比如C++ STL fstream会leak file descriptors. : 打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak到child : process里面。 : 这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那都是10 : 多年的老kernel了。C++20也是一个鸟样。因此对于我来讲fstream永久不可用。当然对 : 于别人可能是另外的情况。 : 这些,永远不会有人告诉你。你要先带着问题去找答案,还不是很容易能找到。 : : reentrant
|
T********i 发帖数: 2416 | 24 开玩笑吧?
你开了一大堆std fstream,然后fork/exec,你来教教我,怎么close那些fstream?
自己的都close不掉,更何况第三方别人的?
的。
【在 n******t 的大作中提到】 : UNIX本來 fork和exec就是兩個事情。一般來說,fork之後在exec前是要做一堆事情的。 : 這個情況,exec前關掉不需要的文件描述符就完事了,O_CLOEXEC省點事情而已。 : : child : 10
|
n******t 发帖数: 4406 | 25 你知道我在說什麼吧?
想吵架就算了,沒閒工夫。
【在 T********i 的大作中提到】 : 开玩笑吧? : 你开了一大堆std fstream,然后fork/exec,你来教教我,怎么close那些fstream? : 自己的都close不掉,更何况第三方别人的? : : 的。
|
h****e 发帖数: 2125 | 26 对,秒怂尿遁。
【在 n******t 的大作中提到】 : 你知道我在說什麼吧? : 想吵架就算了,沒閒工夫。
|
g****t 发帖数: 31659 | 27 C系列语言,不全是OS的问题。
从语言特点来看,
Buff越界,飞指针是硬伤。代码量越大,出问题的概率越大。
这是不可改变的。跟OS无关。我觉得其实都可以建立概率模型。
现实项目的目标是控制这些问题的危害。而不是谋求没个地方都没问题。因为就算你现
在没问题了,下一个版本从头查也不现实。或者客户让你稍微定制一点,改一点,也无
法从头再查一次。
任何一个web borowser,往往用几个小时内存就有涨到无穷大的趋势……
。但是危害并不大。
: c/c 是设计给懂os的人用的。所谓的坑都和系统有关。所为新语言的新
特性都
是把os
: 的东西包一下。现在的语言是设计尽量降低os的门槛。
【在 l*******m 的大作中提到】 : c/c++是设计给懂os的人用的。所谓的坑都和系统有关。所为新语言的新特性都是把os : 的东西包一下。现在的语言是设计尽量降低os的门槛。
|
x****u 发帖数: 44466 | 28 你贴10行代码很难么?
【在 T********i 的大作中提到】 : 说人话很难么?简直不理解你这种人。。。 : : : 干活的是std::system(....) :
|
x****u 发帖数: 44466 | 29 RTOS的应用领域太小了,就算是真要实时,也得躲开C++防止反应堆爆炸汽车刹不住车
Cpp14
【在 m*****p 的大作中提到】 : MCU了解下,RTOS重啓只需要幾毫秒,你安卓和python辦得到嗎?主力編程語言是Cpp14 : ,純C的很囉嗦。 : : : 现在像样点的板子都支持安卓和python了,屠龙之技没处用了 :
|
n******t 发帖数: 4406 | 30 你要怕越界,自己寫個buf,自帶一個長度,改get(x, n),set(x,n),總共10行代碼,
能有多大事?
本來計算機就不知道什麼是界,你要硬性定義就是會造成某些事情幹不了。
【在 g****t 的大作中提到】 : C系列语言,不全是OS的问题。 : 从语言特点来看, : Buff越界,飞指针是硬伤。代码量越大,出问题的概率越大。 : 这是不可改变的。跟OS无关。我觉得其实都可以建立概率模型。 : 现实项目的目标是控制这些问题的危害。而不是谋求没个地方都没问题。因为就算你现 : 在没问题了,下一个版本从头查也不现实。或者客户让你稍微定制一点,改一点,也无 : 法从头再查一次。 : 任何一个web borowser,往往用几个小时内存就有涨到无穷大的趋势…… : 。但是危害并不大。 :
|
|
|
g****t 发帖数: 31659 | 31 你这个n从哪里来?是常数还是参数?计算出来的还是从IO读的?这事没那么简单。c99
动态数组大多是人都弃用了
。你总不能说定标准的人都是无能之辈。另外第三方库还有大量的代码,问题会扩散的
。网络送收什么的,buff多了去了。查起来不现实。
Golang slice也会内存泄漏。
: 你要怕越界,自己寫個buf,自帶一個長度,改get(x, n),set(x,n),總
共10行
代碼,
: 能有多大事?
: 本來計算機就不知道什麼是界,你要硬性定義就是會造成某些事情幹不了。
【在 n******t 的大作中提到】 : 你要怕越界,自己寫個buf,自帶一個長度,改get(x, n),set(x,n),總共10行代碼, : 能有多大事? : 本來計算機就不知道什麼是界,你要硬性定義就是會造成某些事情幹不了。
|
x****u 发帖数: 44466 | 32 他说的是在方法上消灭越界可能性。。。
你觉得自己改一下程序简单,但火星探测器着陆时来次越界,把你一起发射过去也得摔
用算法或者人力避免越界是停机问题不可解,唯一办法就是逻辑上取消越界的可能
【在 n******t 的大作中提到】 : 你要怕越界,自己寫個buf,自帶一個長度,改get(x, n),set(x,n),總共10行代碼, : 能有多大事? : 本來計算機就不知道什麼是界,你要硬性定義就是會造成某些事情幹不了。
|
n******t 发帖数: 4406 | 33 x[n] -> get(x,n)
x 改成結構自帶長度,alloc的時候把界寫進去。
所謂不讓你越界其實就是幹了這麼一件事,有什麼意思嗎。
c99
了。
【在 g****t 的大作中提到】 : 你这个n从哪里来?是常数还是参数?计算出来的还是从IO读的?这事没那么简单。c99 : 动态数组大多是人都弃用了 : 。你总不能说定标准的人都是无能之辈。另外第三方库还有大量的代码,问题会扩散的 : 。网络送收什么的,buff多了去了。查起来不现实。 : Golang slice也会内存泄漏。 : : : 你要怕越界,自己寫個buf,自帶一個長度,改get(x, n),set(x,n),總 : 共10行 : 代碼, : : 能有多大事?
|
g****t 发帖数: 31659 | 34 Golang的slice除了length,还有capacity。这个设计其实是不错的。但是C89标准没有
被推翻。有第三方库,问题仍然是很难避免的。这是一方面。另一方面,指针数组,多
维指针数组什么的,上一层不出问题,下一层就不一定了。
: x[n] -
【在 n******t 的大作中提到】 : x[n] -> get(x,n) : x 改成結構自帶長度,alloc的時候把界寫進去。 : 所謂不讓你越界其實就是幹了這麼一件事,有什麼意思嗎。 : : c99 : 了。
|
x****u 发帖数: 44466 | 35 C的一维数组就是buffer,多维数组从一开始就是闭门造车错误设计
实际上需要的是,列表,容器,matlab数组对象,解析buffer的结构体
【在 g****t 的大作中提到】 : Golang的slice除了length,还有capacity。这个设计其实是不错的。但是C89标准没有 : 被推翻。有第三方库,问题仍然是很难避免的。这是一方面。另一方面,指针数组,多 : 维指针数组什么的,上一层不出问题,下一层就不一定了。 : : : x[n] -
|
n******t 发帖数: 4406 | 36 有capacity就是再加一個成員,多大個事嗎?go那個設計無數C的庫都是這麼搞的,一
般經驗多點的C程序員也是這麼幹的。
指針數組,數組的地方仍然是數組。多維數組都可以變成i*ncol+j來尋址的一維數組,
我是不懂這東西麻煩在哪裏。
golang省事的地方主要是它猥瑣地用了gc,which C/C++是不自帶的。(你要想用也有
)。
【在 g****t 的大作中提到】 : Golang的slice除了length,还有capacity。这个设计其实是不错的。但是C89标准没有 : 被推翻。有第三方库,问题仍然是很难避免的。这是一方面。另一方面,指针数组,多 : 维指针数组什么的,上一层不出问题,下一层就不一定了。 : : : x[n] -
|
T********i 发帖数: 2416 | 37 我原文说了30行。不服的话咱们定个赌局呗,我做出来你彻底滚出mitbbs么?
前提是30行代码是我的,其它的都是第三方的开源库,include不算行数。
: 你贴10行代码很难么?
【在 x****u 的大作中提到】 : C的一维数组就是buffer,多维数组从一开始就是闭门造车错误设计 : 实际上需要的是,列表,容器,matlab数组对象,解析buffer的结构体
|
m*****p 发帖数: 39 | 38 我很奇怪,filehandle和clone process應該是OS設計的鍋,不應該Cpp語言背。
: 毛病多了去了,比如C STL fstream会leak file descriptors.
: 打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak
到child
: process里面。
: 这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那
都是10
: 多年的老kernel了。C 20也是一个鸟样。因此对于我来讲fstream永久不可用。
当然对
: 于别人可能是另外的情况。
: 这些,永远不会有人告诉你。你要先带着问题去找答案,还不是很容易能找到。
: reentrant
【在 T********i 的大作中提到】 : 我原文说了30行。不服的话咱们定个赌局呗,我做出来你彻底滚出mitbbs么? : 前提是30行代码是我的,其它的都是第三方的开源库,include不算行数。 : : : 你贴10行代码很难么? :
|
m*****p 发帖数: 39 | 39 你確定你用過AWS?你確定AWS的VM支持幾TB物理內存?哪款CPU、什麼VM?我記得只有
HANA系統有12TB內存。普通的VM沒有那麼多物理內存。
: 现在内存还是个事吗?cloud 里的vm几秒钟给你调到几千个G.
【在 n******n 的大作中提到】 : 现在内存还是个事吗?cloud 里的vm几秒钟给你调到几千个G.
|
m*****p 发帖数: 39 | 40 這個我也不懂,Hadoop不是Java寫的?那不就是處理大數據的
: JDK连个大数组都不支持,写Unsafe跟写C没啥区别。
: reentrant
【在 p***o 的大作中提到】 : 很多学生把作业放到github上好在简历里充数 ...
|
|
|
m*****p 发帖数: 39 | 41 還真不是,Cpp編譯慢,但運行飛快,不比C差,我沒看到誰用匯編寫的,那個不好移植。
: RTOS的应用领域太小了,就算是真要实时,也得躲开C 防止反应堆爆炸汽车刹
不住车
: Cpp14
【在 x****u 的大作中提到】 : C的一维数组就是buffer,多维数组从一开始就是闭门造车错误设计 : 实际上需要的是,列表,容器,matlab数组对象,解析buffer的结构体
|
T********i 发帖数: 2416 | 42 这有什么奇怪的?你设计一个标准库是要给人家用的。
现在别人不可用。而且更恶劣的是不但不可用,而且还有一个大坑!
这个锅,谁来背合适?
leak
【在 m*****p 的大作中提到】 : 我很奇怪,filehandle和clone process應該是OS設計的鍋,不應該Cpp語言背。 : : : 毛病多了去了,比如C STL fstream会leak file descriptors. : : 打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak : 到child : : process里面。 : : 这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那 : 都是10 : : 多年的老kernel了。C 20也是一个鸟样。因此对于我来讲fstream永久不可用。 : 当然对
|
n******t 发帖数: 4406 | 43 還是這個問題,取決你理解fork/exec這兩個系統調用的目的是什麼。
again,這個問題和你用的是C/C++, python, Java都無關。
leak
【在 m*****p 的大作中提到】 : 我很奇怪,filehandle和clone process應該是OS設計的鍋,不應該Cpp語言背。 : : : 毛病多了去了,比如C STL fstream会leak file descriptors. : : 打开一个文件,然后立刻开child process。然后这个文件handle就会永久leak : 到child : : process里面。 : : 这就是开文件时候没设置O_CLOEXEC。当然和老kernel不支持也有一定关系。那 : 都是10 : : 多年的老kernel了。C 20也是一个鸟样。因此对于我来讲fstream永久不可用。 : 当然对
|
m*****p 发帖数: 39 | 44 感覺明顯應該是Linux那幫人背鍋啊,fork/clone/exec/close根本不是C語言的範疇。
Windows有這種問題嗎?AIX有麼?是不是只有Linux有?
另外Java也沒解決,Java的JVM可以fork另外一個JVM嗎?
【在 T********i 的大作中提到】 : 这有什么奇怪的?你设计一个标准库是要给人家用的。 : 现在别人不可用。而且更恶劣的是不但不可用,而且还有一个大坑! : 这个锅,谁来背合适? : : leak
|
T********i 发帖数: 2416 | 45 没人给你背锅。作为设计者,傻逼的永远是自己,而不是用户。
任何人要设计一个fstream给用户用,不会leak是最起码的要求。扯任何别的那是纯属
不要脸。
Java当然也有runtime exec。虽然这方面我不熟悉,但是我不认为Java需要用户在exec
前关闭所有文件。或者不关闭会有leak。
这根本不是技术问题,是起码的逻辑和人性有没有丧失的问题。
【在 m*****p 的大作中提到】 : 感覺明顯應該是Linux那幫人背鍋啊,fork/clone/exec/close根本不是C語言的範疇。 : Windows有這種問題嗎?AIX有麼?是不是只有Linux有? : 另外Java也沒解決,Java的JVM可以fork另外一個JVM嗎?
|
x****u 发帖数: 44466 | 46 很多领域为了防止C++码农作死,宁可搞个简单的DSL一样高度优化。
植。
【在 m*****p 的大作中提到】 : 還真不是,Cpp編譯慢,但運行飛快,不比C差,我沒看到誰用匯編寫的,那個不好移植。 : : : RTOS的应用领域太小了,就算是真要实时,也得躲开C 防止反应堆爆炸汽车刹 : 不住车 : : Cpp14 :
|
x****u 发帖数: 44466 | 47 我同意这个观点
【在 T********i 的大作中提到】 : 这有什么奇怪的?你设计一个标准库是要给人家用的。 : 现在别人不可用。而且更恶劣的是不但不可用,而且还有一个大坑! : 这个锅,谁来背合适? : : leak
|
x****u 发帖数: 44466 | 48 能不能不要扯淡,既然要写肯定是标准库
否则你自己写个库,传入一个文件名返回sha256就无敌了
【在 T********i 的大作中提到】 : 我原文说了30行。不服的话咱们定个赌局呗,我做出来你彻底滚出mitbbs么? : 前提是30行代码是我的,其它的都是第三方的开源库,include不算行数。 : : : 你贴10行代码很难么? :
|