小编Ant*_*lov的帖子

分段寄存器使用

我试图了解内存管理如何进入低级别并且有几个问题.

1)由Kip R. Irvine撰写的关于汇编语言的书说,在实模式中,前三个段寄存器在程序启动时加载了代码,数据和堆栈段的基址.这对我来说有点不合时宜.是手动指定这些值还是汇编程序生成将值写入寄存器的指令?如果它自动发生,它如何找出这些段的大小?

2)我知道Linux使用扁平线性模型,即以非常有限的方式使用分段.此外,根据Daniel P. Bovet和Marco Cesati的"理解Linux内核",有四个主要部分:用户数据,用户代码,内核数据和GDT中的内核代码.所有四个段都具有相同的大小和基址.我不明白为什么四个中只有它们的类型和访问权限不同(它们都产生相同的线性地址,对吧?).为什么不只使用其中一个并将其描述符写入所有段寄存器?

3)不使用分段的操作系统如何将程序划分为逻辑段?例如,他们如何在没有段描述符的情况下将堆栈与代码区分开来.我读过分页可以用来处理这些事情,但是不明白怎么做.

linux memory x86

6
推荐指数
2
解决办法
1667
查看次数

Ifstream从文本文件中读取错误的字符

我有以下简单的代码,它将文本文件的内容读入字符数组:

const char* name = "test.txt";
std::cout << "Loading file " << name << std::endl;
std::ifstream file;
file.open(name);
file.seekg (0, std::ios::end);
int length = file.tellg();
std::cout << "Size: " << length << " bytes" << std::endl;
file.seekg (0, std::ios::beg);
char* buffer = new char[length];
file.read(buffer,length);
file.close();
std::cout.write(buffer,length);
Run Code Online (Sandbox Code Playgroud)

但是,似乎ifstream从文件读取错误的字符数:每行1个额外的字符.我搜索了网络,看起来在win7文本文件中除了每行末尾的换行符(\n)之外还有回车符号(\ r).但是,流以某种方式看不到这些\ r,但仍然使用文件中的原始符号数,从文件末尾读取额外的字节.有可能以某种方式解决这个问题吗?

如果它有帮助:我使用MinGW编译器和Windows 7 64位.

c++ io

2
推荐指数
1
解决办法
2109
查看次数

标签 统计

c++ ×1

io ×1

linux ×1

memory ×1

x86 ×1