返回信息流我有一个1+G大小的文件需要把里面的部分数据读出来。然后写入另一个文件。但是同样的程序,用VS2013运行的结果只有60+M,但是在Linux下运行就正确的,可以达到所需要的文件大小(900+M)。
想请教一下这个什么原因。谢谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #88061同步于 2015/7/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
VS & Linux,同一个程序运行结果不一样
chenhebing
2015/7/19镜像同步28 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
肯定涉及了未定义行为吧。比如,不要假设struct在内存里是如何存放的。把指向struct xxx { xxx; xxx; xxx}的指针转换成char*然后读取字节,行为是和实现相关的。
还不是很懂。我把代码贴进来您看下。谢谢了
int main(){
ifstream fin("aaa.txt");
ofstream fout("bbb.txt");
int num1=1920*1080*2;
int num2=87;
int num3=2048;
int num4;
char data[num1];
num4=num3+num2*(num3+num1);
fin.seekg(num4,ios::beg);
for(int a=0;a<250;++a){
fin.seekg(num3,ios::cur);
fin.read(data,num1);
fout.write(data,fin.gcount());
}
fin.close();
fout.close();
return 0;
}
【 在 nuanyangyang 的大作中提到: 】
: 肯定涉及了未定义行为吧。比如,不要假设struct在内存里是如何存放的。把指向struct xxx { xxx; xxx; xxx}的指针转换成char*然后读取字节,行为是和实现相关的。
看不懂。。。
【 在 chenhebing (DB) 的大作中提到: 】
: 还不是很懂。我把代码贴进来您看下。谢谢了
: [code=c]
: int main(){
: ifstream fin("aaa.txt");
发自〖iBYR-iOS客户端〗
太不严谨了啊 内存分配确实过大了
【 在 chenhebing 的大作中提到: 】
: 还不是很懂。我把代码贴进来您看下。谢谢了
: [code=c]
: int main(){
: ...................
不是40M,是4M,不是很大,就没考虑合适不合适的问题。
【 在 nuanyangyang 的大作中提到: 】
: 你在栈上分配40M内存:
: char data[num1];
: 这真的没问题吗?
: ...................