作者dream1203 (小叮当)
看板EE_DSnP
标题[讨论] Dynamic Array的记忆体问题
时间Thu Dec 1 17:08:25 2011
因为作业中implement Array的方法是
先new一个T* _data的位子 然後直接往下拿_data[i]
我想问的是:这样会不会不小心拿到别人的data呢?
例如说_data = 0x20 (为方便,假设heap memory只有256 bytes)
同时有另外一个static array的头在0x30好了
这样_data[4]就等於0x30了… 岂不惨案否QQ
是说系统不会让这种事情发生吗? 还是我完全理解错误了呢QQ
另外还有一个问题是… 我爬了一下文
似乎Dynamic Array在使用时 系统也会帮我们存他的大小?
是否真有此事呢QQ
感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.246.85
1F:→ dream1203:我知道第一个问题了…XD 挺蠢的哈哈 12/01 17:41
2F:→ shryuhuai:T有定义destructor的话就会存大小,没有的话就不会存 12/01 23:45
3F:→ shryuhuai:不过既然是template当作没有存比较保险吧 12/01 23:46
4F:推 ric2k1:你如果是用 new 来 allocate _data,系统自然会给他适当大小 12/02 00:27
5F:→ ric2k1:的记忆体 12/02 00:27
6F:→ dream1203:完全理解了! 感谢二楼和老师! 12/02 00:59
7F:→ dream1203:对了 其实我一直想问 如果没有定义destructor的话 系统 12/02 01:03
8F:→ dream1203:就真的不存array大小了吗? 如果是的话他怎麽delete? 12/02 01:03
9F:→ dream1203:如果不是的话… 他是藏到哪去了呢QQ 12/02 01:03
10F:→ shryuhuai:我猜是真的没有了,我的理解是在c++上不会知道记忆体大小 12/02 09:22
11F:→ shryuhuai:在c上面就一直都知道,void* p =malloc(1000); free(p); 12/02 09:23
12F:→ shryuhuai:似乎清除记忆体的时候就会自动知道大小了 12/02 09:27
13F:→ shryuhuai:存size是为了知道在清除记忆体前,要呼叫几次destructor 12/02 09:29
14F:→ shryuhuai:因为destructor是c++的东西,不知道记忆体大小,要额外记 12/02 09:30
15F:→ shryuhuai:最後清除记忆体系统内只要用c的方法就可以清除了 12/02 09:31
16F:→ dream1203:所以说~ 在heap里面allocate的记忆体大小是有被存起来的 12/05 00:59
17F:→ dream1203:只是array大小没被存(因为没destructor就不用存这东西) 12/05 00:59