内存分配基本问题

lee0100317 2009-08-09 03:05:53
c++里面有些开辟的空间是不是不用你手动回收?我列出一些场合大家帮忙看看
int a[20];
int *a=new int [20];
string str="123";
string *buf;
buf=(string *)malloc (sizeof(str));
还有一种情况是buf=(char*)malloc(20);
buf[10]='\0';
这样是不是需要手动free 需要的话'\0'后的空间会正常释放?
还有我实例化类的话 CMYCLASS imyclass;和CMYCLASS *pimyclass =new CMYCLASS;这两种方式有什么差别,是不是new的话就一定要手动delete

还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
...全文
51 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-08-09
看看这个http://baike.baidu.com/view/1250144.htm

回复
lee0100317 2009-08-09
[Quote=引用 3 楼 tr0j4n 的回复:]
gb2312中汉字的编码和汉字的unicode的编码是不同的。
[/Quote]
能详细的介绍下吗? 非unicode模式编程的时候 我取出2个字节肯定是一个汉字了,但这两个字节会是什么呢?
回复
jingzhongrong 2009-08-09
1、new对应delete,malloc对应free,如果new的空间不释放,在程序退出时由操作系统回收。
2、int a[20];存放在栈上,在退出变量作用范围后被自动释放。
3、string str="123"; 使用的是string的构造函数,内存由string类管理,不需要自己释放。
4、\0只是C、C++中字符串结束的标志,与需不需要手动释放内存没有关系。
回复
MoXiaoRab 2009-08-09
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。高位在前

UTF的字节序由BOM决定,LZ的概念很混杂!

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
  在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
  这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
回复
gamedragon 2009-08-09
[Quote=引用楼主 lee0100317 的回复:]
还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
[/Quote]
第一个,不是,而且即使有'\0'也不一定是结尾。如果用string::c_str(),会在后面加个'\0',然后把指针返回。
第二个,没人规定unicode存储是大头或小头,当然用x86肯定都是小头。
第三个,不一样,两者之间基本没有关系。
回复
MoXiaoRab 2009-08-09
gb2312中汉字的编码和汉字的unicode的编码是不同的。
回复
zhuzhenlei 2009-08-09
http://topic.csdn.net/t/20031127/16/2502200.html
回复
雪影 2009-08-09
1.使用new或malloc申请的空间在堆区,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
一把需要程序员自己释放,使用delete或free
2.其他的变量都在栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
3. stl::string结尾是以‘\0’结尾的

回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告