呵呵,这个Creamdog是谁啊?

cwanter 2003-08-09 07:20:00
今天下午,我无事翻看CSDN的FAQ,由于我经常在C++版逛悠,所以就到C++版的FAQ看了看。当我发现我的一篇不能称为文章的东东http://expert.csdn.net/expert/FAQ/FAQ_Index.asp?id=174151在FAQ中出现的时候,我就点击看了一下。跟别的FAQ也没有什么两样,但我看到最后的时候有点吃惊:(注:以上FAQ非原文,由于存在不少错漏之处,部分概念性错误已由Creamdog修改)我想:唉呀,当初就不应该把这些乱七八糟的东西贴出来,让高手看出那么多问题,岂不是丢人现眼。我就赶紧查看我以前的贴子http://expert.csdn.net/Expert/topic/1988/1988045.xml?temp=.9784967看看到底是哪个地方有问题,好改正自己的错误,因为自己水平有限,错误肯定很多。但我仔细比较FAQ跟我的贴子内容,我发现只字未改。那所说的错漏之处,部分概念性错误又在哪里呢?这个Creamdog又到底是谁呢?我以为这是CSDN整理FAQ都采用的措施,就查看了其他的贴子,结果没有发现有类似情况。那我就不明白了,这个Creamdog到底是什么意思?

我发这个贴子的目的不是说不让人批评,但这种莫名其妙的东东让人有些难以接受。我希望这个Creamdog能出来解释一下。顺便帮我指出我对指针的错误理解,好让我有更深入的认识~
...全文
46 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwanter 2003-08-10
  • 打赏
  • 举报
回复
to ckacka(小红帽):
恕我眼拙,没有看出那有什么问题。你能指教吗?在这贴出来好了。
BTW:我以为这件事结束了,就把所有的短消息删除了~
ckacka 2003-08-10
  • 打赏
  • 举报
回复
to cwanter:
好像用char也一样吧?
BAYERN 2003-08-10
  • 打赏
  • 举报
回复
UP
cwanter 2003-08-10
  • 打赏
  • 举报
回复
呵呵,首先承认是我看东西不仔细,fireseed版主确实对我的贴子做了改动,就这点我向fireseed版主道歉。我们到这儿都是学习和交流的,做版主是义务的,要付出很多时间和精力,我对版主们表示一下感谢:)
我又比较了FAQ和我的贴子,我发现fireseed版主所说的三处修改其实只修改了一个地方,就是第三个,第一二个根本没有修改。既然误会是由技术引起的,我们还是从技术入手:
1、关于堆栈跟栈的提法问题:我想大家都清楚堆栈说的就是栈,应该没有人会把堆栈当做堆。题外话:《windows核心编程》的译者把heap译做堆栈,一开始还真让人转不过弯儿来,我想大家也有同感:)
2、
原贴:
“提到指针就不能不说一下堆栈和堆:堆栈是每个线程独有的,是存放局部变量的地方;”
修改:
“提到指针就不能不说一下栈和堆:堆是每个线程独有的,是存放局部变量的地方;”
注释:
堆是堆,栈是栈,概念混淆

我宁愿相信这是fireseed版主的拼写错误,栈才是每个线程独有的。如果fireseed版主对这点有疑问,请阅读《windows核心编程》16章和18章。

3、关于栈和堆内存管理的提法问题,我想这才是大家应该讨论的地方:我认同cnswdevnet(跟皮虫) 兄的说法,因为我是想从程序员的角度来说明堆和栈内存管理方面的区别。由于本人表达能力有限,可能会引起一些误会,这点希望大家谅解。

4、to ckacka(小红帽):你没有看清我举的例子,我是用char型。正是考虑到在目前所有的编译器对char的实现都是一个字节,我才用char举例。

本来本人水平有限,不应该拿这点东东出来献拙,但由于看到基础版的网友对指针的一些基础问题总有人提问,正好我在别的论坛贴过这点东东,就顺便贴了过来,希望对象我一样的初学者能有些帮助。没想到,最后引起这么大的误会,在这儿渔夫向大家表示道谦。尤其是fireseed版主,希望这件小事不会影响你继续当版主为大家服务的信心。如果真有什么想法,那可真是渔夫的罪过了:)

好了,道过谦了,大家还是谈技术吧。关于栈和堆内存管理的提法问题,还希望各位高手多指教,谢谢了~
cnswdevnet 2003-08-10
  • 打赏
  • 举报
回复
对于楼主的贴子和FAQ,大致修改记录如下:
原贴:
“提到指针就不能不说一下堆栈和堆:堆栈是每个线程独有的,是存放局部变量的地方;”
修改:
“提到指针就不能不说一下栈和堆:堆是每个线程独有的,是存放局部变量的地方;”
注释:
堆是堆,栈是栈,概念混淆


原贴:
“p的内存分配在堆栈上,占有4个字节的大小”
修改:
“p的内存分配在栈上,占有4个字节的大小”
注释:
同上


原贴:
“我们知道堆栈上的内存是由编译器管理,而堆上的内存是由我们(程序员管理)”
修改:
“我们知道栈上的内存是在编译期固定的,而堆上的内存是由程序动态分配的”
注释:
说法不严谨
-------------------------------------------------------

上面的"修改"错得让我很震惊, 不得不说几句了:

修改:
“提到指针就不能不说一下栈和堆:堆是每个线程独有的,是存放局部变量的地方;”

-- 第一, "堆栈"就是"栈" (stack)! 我真不知道是修改人的基本概念不清, 还是我的知识老化了. 下面选自现代英汉词典, 好好看看:
stack
[stAk;stAk ]
(堆)栈;[堆叠,叠式储存器]
(1)
A reserved area of memory where the CPU automatically saves the program counter and the contents of working registers when a program interrupt occurs. The stack normally forces users to return from interrupts in the same order that interrupts occurred.
内存中的一块留用存储区,当程序中断产生时,CPU自动在其中保存程序计数器和工作寄存器的内容。栈通常迫使用户程序以中断发生的同样顺序从中断点返回。

-- 第二, "堆是每个线程独有的,是存放局部变量的地方"的说法, 是完全错误的! 事实恰恰相反, 是***栈***"是每个线程独有的,是存放局部变量的地方"

-- 结论, 原贴是正确的, "修改"是错误的.



修改:
“p的内存分配在栈上,占有4个字节的大小”
-- 同上


原贴:
“我们知道堆栈上的内存是由编译器管理,而堆上的内存是由我们(程序员管理)”
修改:
“我们知道栈上的内存是在编译期固定的,而堆上的内存是由程序动态分配的”
注释:
说法不严谨

-- 不严禁的恰恰是"修改". 这里的话真正想说得是: 堆栈上的变量/物件的内存是由编译器产生的代码完成分配/回收; 而堆上的变量/物件的内存必须由程序员的代码(即非编译器自动产生的代码)完成分配/回收工作. 原贴更接近这个意思. 而"修改"就与这个意思相差太远了. 首先什么是"内存是在编译期固定的"? 是说整个栈的大小? 还是说整个栈的首地址? 还是说所有的堆栈上的变量/物件的内存地址是在编译期固定的? 这个话实在是含混不清. 其次, "堆上的内存是由程序动态分配的"没有把重点讲清楚, 即没讲清楚 这个程序是由编译器自动产生的, 还是程序员代码产生的? 这个没讲清楚, 这句就毫无意义, 因为严格来说, 栈也是"程序动态分配的" (只不过它一但产生后就将一直在那里直到线程结束).
ckacka 2003-08-10
  • 打赏
  • 举报
回复
哦,FAQ马上就撤销

btw: 顺便说一句,自增包含一个赋值操作,象arr这样的指针都是不可被赋值的
cwanter 2003-08-10
  • 打赏
  • 举报
回复
to ckacka(小红帽):那个FAQ还没有撤消啊?赶紧撤消吧,免得误导别人了~
cwanter 2003-08-10
  • 打赏
  • 举报
回复
是我表达不清,我指的是arr的自增~
ckacka 2003-08-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>

using namespace std;

#define type char
// if it is char, the pace bettween "arr" and "arr + 1" is 1 bytes;
// if it is int, the pace bettween "arr" and "arr + 1" is 4 bytes;
// if it is double, the pace bettween "arr" and "arr + 1" is 8 bytes;
// the pace is computed by compiler automatically.

int main()
{
type arr[10] = { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 };
cout << arr << endl;

type *pn = NULL;
pn = arr;
cout << *arr << endl;

cout << *(arr + 1) << endl;
cout << arr + 1 << endl;

system("pause");
return 0;
}
ckacka 2003-08-09
  • 打赏
  • 举报
回复
水园是个消遣的好地方呀~~~

^_^
MaiCle 2003-08-09
  • 打赏
  • 举报
回复
真相大白呵,楼主可以放心了。

不过也有这么个说法:堆栈与堆就是说栈与堆,
fireseed 2003-08-09
  • 打赏
  • 举报
回复
别提水园了,我已经不去那里了。

僵尸一日不死,我一日不回水园

MD,怎么每次都是和大版主之间的事情,每次都是由于做小版主!
上次是小鸟,这回是雍雍,不知道下回是谁……
chinajiji 2003-08-09
  • 打赏
  • 举报
回复
奶油狗在水园的名气很大的..
cisbest 2003-08-09
  • 打赏
  • 举报
回复
做斑竹的果然厉害过人
ckacka 2003-08-09
  • 打赏
  • 举报
回复
主要还是误会,奶油狗兄弟如果要留言,用fireseed比较好些^_^,乍一看,我都蒙了,仔细想想猜知道就是你。

呵呵,看来是误会一场!!!
chinazcw 2003-08-09
  • 打赏
  • 举报
回复
我也顶~~
fireseed 2003-08-09
  • 打赏
  • 举报
回复
出现这种错误完全是我个人的责任,我没有把说明解释工作做好,我在这里向楼主道歉!

我在以后提交修改后的FAQ时,一定会给与贴主正式的声明。希望能得到楼主的谅解以及大家的理解和支持!
ckacka 2003-08-09
  • 打赏
  • 举报
回复
to fireseed兄:
也给你发了留言,你先看看。
ckacka 2003-08-09
  • 打赏
  • 举报
回复
to cwanter兄:
给你发了留言,由于现在对留言的限制太多,分了多次给你,你先看看。
fireseed 2003-08-09
  • 打赏
  • 举报
回复
Creamdog就是我,C++基础类的小版主。(并无任何宣扬之意,旨在说明身份)

首先要说的是,FAQ是一个问与答,不是精选贴专辑。它的作用是给网友们一个快速查找答案的地方,而不是让网友研究贴子作者的文法。所以它只注重内容而不注重原贴,当原贴有任何错漏之处时,版主有权也有义务对其进行修改,希望楼主可以理解。如果楼主觉得自己的贴子实属精华,可以发短消息给我,我审查后可以加此贴为精华。以下是CSDN对版主的明文规定:
“注意:有些网友主要解答人填与问题解答无关的人员,审核时应重点审查!!
审核通过的FAQ如果发现主要解答人明显错误,属于斑竹的严重失职,要严惩!!!”

对于楼主的贴子和FAQ,大致修改记录如下:
原贴:
“提到指针就不能不说一下堆栈和堆:堆栈是每个线程独有的,是存放局部变量的地方;”
修改:
“提到指针就不能不说一下栈和堆:堆是每个线程独有的,是存放局部变量的地方;”
注释:
堆是堆,栈是栈,概念混淆


原贴:
“p的内存分配在堆栈上,占有4个字节的大小”
修改:
“p的内存分配在栈上,占有4个字节的大小”
注释:
同上


原贴:
“我们知道堆栈上的内存是由编译器管理,而堆上的内存是由我们(程序员管理)”
修改:
“我们知道栈上的内存是在编译期固定的,而堆上的内存是由程序动态分配的”
注释:
说法不严谨


其它略

作为版主,每天都要做的工作就是审核FAQ列表。由于CSDN的网络速度很差,加上提交FAQ的人很多,所以这项工作非常费时。但这又是一份责任重大的工作,如果解答出错,那么FAQ就失去了意义,便是版主的严重失职。基础类本来就是一个给初学者提供帮助的地方,因此FAQ的正确性事关重大!
但是,虽然CSDN没有规定,但我为了给贴主和网友一个交待,在修改了任何原贴和解答之后,我都会给予说明,正如楼主所述,我在贴子最后声明“注:以上FAQ非原文,由于存在不少错漏之处,部分概念性错误已由Creamdog修改”。我想这样可以避免很多误会,比方说,如果我修改之后反而出现了错误,大家也查有所据,寻有所源。
虽然于情于理版主都因该对每一个提交上来的FAQ笃实的审查、校验,但对于版主个人来讲,精力实在有限,要想保证每一个FAQ都精辟入理是不现实的。所以如有错漏之处,还请网友严加指正,多多包涵。

再次感谢楼主的支持与合作,CSDN需要您的关心和参与!
加载更多回复(5)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧