| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1205 人关注过本帖
标题:[求助]布局new操作符的问题
只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
还有一点的是, char* buffer=new char[512]; 这里分配的空间首先要足够大,推荐用char来分配,因为char是1个字节的;可以保证其他的变量占用的内存char的倍数(个人看发,有错误请指出)
然后 placement new在"占用"分配的空间之后,还会引起 constructor 的构造

c++/C + 汇编 = 天下无敌
2006-07-25 16:02
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
推荐用char来分配,因为char是1个字节的;可以保证其他的变量占用的内存char的倍数(个人看发,有错误请指出)
11:比原来的小就行吧
因为都是char的倍数啊

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-25 16:05
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用song4在2006-7-25 16:05:32的发言:
推荐用char来分配,因为char是1个字节的;可以保证其他的变量占用的内存char的倍数(个人看发,有错误请指出)
11:比原来的小就行吧
因为都是char的倍数啊

但是问题是你的类的大小有可以是奇数字节,那个如果不用char来分配,用int,double这些来分配的话,在placement new之后的构造函数"占用"该内存的时候,估计可能会出现"错位"
(又是我个人猜测)


c++/C + 汇编 = 天下无敌
2006-07-25 17:31
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
不会的吧
你试试,什么类型只影响它的存取的过程,不影响结果

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-26 09:21
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用热情依然在2006-7-25 17:31:13的发言:

但是问题是你的类的大小有可以是奇数字节,那个如果不用char来分配,用int,double这些来分配的话,在placement new之后的构造函数"占用"该内存的时候,估计可能会出现"错位"
(又是我个人猜测)

不管是用new char还是new int还是new double或者malloc,只要申请的内存大小是一样的,那么从内存的形式上来看没什么区别,你可以用new char申请了内存,然后在内存中存取int类型,或者用new int申请了内存,然后在里面存取char类型,内存的本质不多是一段存取数据的空间,只要按照存进去的格式取出来,那么不管是怎么申请的都没关系


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-26 14:48
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
aogun,

从计算机的结构层面来看是对的, 如果你用汇编编程, 那根本就没有数据类型这么一说了. 但是只要是高级语言, 就有数据类型一说, 这就意味着数据类型要匹配. 一个技巧就是使用type - cast, 使用type cast 并不会改变数据存储内容上的任何变化, 他只是告诉编译器某个数据为什么类型. 因为编译器会对数据类型的匹配作要求.



自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-07-26 15:14
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用kai在2006-7-26 15:14:10的发言:
aogun,

从计算机的结构层面来看是对的, 如果你用汇编编程, 那根本就没有数据类型这么一说了. 但是只要是高级语言, 就有数据类型一说, 这就意味着数据类型要匹配. 一个技巧就是使用type - cast, 使用type cast 并不会改变数据存储内容上的任何变化, 他只是告诉编译器某个数据为什么类型. 因为编译器会对数据类型的匹配作要求.


这个我知道的,我上面所写的只是对于热情依然所说的内存错位来说的,我说的时候也特意指了对于内存的形式来说,因为对于placement new来说,其所用的内存在分配前到底是属于什么类型没有什么意义


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-26 15:26
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-26 15:28
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
穆扬,

恕我直言, 将目光集中到这些细微末节是没有意义的, 最多也是知道和不知道的区别. 此外, 对于底层的操作, 由于c 是 c++ 的子集, 所以c++ 程序员需要掌握指针,需要掌握与地址操作相关的所有c, c++ 函数. 但是这不是c++ 的全部, 或者说c++ 将更多的目光集中到了 对象这个概念. C++ 是对 C 的一个超越. 有很多很多的内容要学阿. 等你学了以后就知道了. 

等你那天懂了什么是 OOP, 那你的境界会上一个很大的台阶, 请注意了, OOP 还不是 C++ 的全部, 等你那天真正掌握了 C++, 那么真的是无敌的. 就好像 Lipmann 那样, 我不相信 Lipmann 会是一个 Java 高手, 但如果因为 Lipmann 不熟悉Servlet, 不熟悉 JavaEE, 就笑话 Lipmann, 那才是真正的滑稽可笑的. 如果让 Microsoft 在一个Java 高手和 lipmann 之间作一个选择, 毫无疑问, 我不说你也知道了. 即便让 Sun 来选人, 结果也是一样的. 为什么呢? 那就是, 语言只是一个工具, 一个伟大的构架师, 之所以伟大, 不是因为他懂了某某语言, 而是他知道一个问题的构架, 这就是编程的思想. 编程思想是独立于语言之外的, 他也是来源于语言的. 

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-07-26 16:15
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-26 17:36
快速回复:[求助]布局new操作符的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027685 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved