相关疑难解决方法(0)

x86分页如何工作?

这个问题旨在填补关于该主题的良好免费信息的真空.

我相信一个好的答案将适合一个大的答案或至少在几个答案.

主要目标是为完整的初学者提供足够的信息,以便他们可以自己学习手册,并能够理解与分页相关的基本操作系统概念.

建议的指导方针:

  • 答案应该是初学者友好的:
    • 具体但可能简化的例子非常重要
    • 欢迎使用所示概念的应用
  • 引用有用的资源是好的
  • 我们欢迎操作系统如何使用分页功能
  • PAE和PSE的解释是受欢迎的
  • 我们欢迎对x86_64进行小规模的讨论

相关问题以及为什么我认为它们不是愚蠢的:

paging x86 virtual-memory

78
推荐指数
2
解决办法
3万
查看次数

在C++中捕获Segfault或任何其他错误/异常/信号,例如在Java中捕获异常

我写了一个基于有缺陷的开源库的Linux程序.该库有时会触发我无法控制的段错误.当然,一旦图书馆有段错误,整个程序就会死掉.但是,即使库有段错误,我也必须确保我的程序继续运行.这是因为我的程序类似于"服务器",它至少需要告诉客户一些不好的事情,并从错误中恢复,而不是鸡蛋......有没有办法做到这一点?

我理解在Java中只需要捕获异常.但是C++如何处理这个呢?

[更新]我知道在C++中也存在异常处理,但Segfault也不例外,是吗?当segfault发生时我不认为会抛出任何东西.据我所知,你必须明确地"抛出"使用try .... catch ....

非常感谢,我对C++很陌生.

c++ signals exception-handling exception segmentation-fault

9
推荐指数
1
解决办法
5514
查看次数

在 unix 上读取文件时如何解决退出代码 139 错误

所以我相信这只是 unix 上的一个问题,如果 Clion 调试器是正确的,它会发生在第一个 fscanf 上,但我不知道为什么我会收到错误 - 进程已完成,退出代码为 139(被信号 11 中断:SIGSEGV ) - 为什么?

struct loginInformation
{
    char username[USERNAME_LENGTH];
    char password[PASSWORD_LENGTH];
    int type;
}accounts[NUM_OF_ACCOUNTS];

void createAccountsFromFile()
{
    FILE *input = fopen("accounts.txt", "r");
    int counter;
    for(counter = 0; counter < NUM_OF_ACCOUNTS; counter++)
    {
        fscanf(input, "%s", accounts[counter].username);
        fscanf(input, "%s", accounts[counter].password);
        fscanf(input, "%d", &accounts[counter].type);
    }
}

int main()
{
    createAccountsFromFile();
}

accounts.txt

user1
pass1
0
user2
pass2
1
user3
pass3
2
user4
pass4
3
Run Code Online (Sandbox Code Playgroud)

c unix

8
推荐指数
1
解决办法
6万
查看次数

SIGSEGV的原因可能是系统的低ram吗?

我的系统内存很小,1.5GB.我有一个C++程序,调用特定方法大约300次.这个方法使用2个映射(每次都清除它们),我想知道在这个方法的某些调用中是否有可能堆栈溢出而程序失败.如果我输入小数据(因此方法被调用30次),程序运行正常.但现在它引发了SIGSEGV错误.我试图解决这个问题大约3天没有运气,我试过的每个解决方案都失败了.

我在下面找到了SIGSEGV的一些原因,但没有任何帮助 C++中的SIGSEGV运行时错误是什么?

好的,这是代码.我有2个实例,其中包含一些关键字功能及其分数

我想获得他们的eucleidian距离,这意味着我必须保存每个实例的所有关键字,然后找到第一个关键字与第二个关键字的差异,然后找到剩下的第二个的差异实例.我想要的是在迭代第一个地图时,能够从第二个地图中删除元素.由于我们有两个消息集合,因此多次调用以下方法,并且将来自第一个消息集合的每个消息与来自第二个消息集合的每个消息进行比较.

我有这个代码,但它突然停止,虽然我检查它工作了几秒钟与多个cout我放在一些地方

请注意,这是针对大学的任务,所以我不能使用提升和所有这些技巧.但我想知道如何绕过我遇到的问题.

float KNNClassifier::distance(const Instance& inst1, const Instance& inst2) {   
map<string,unsigned> feat1;
map<string,unsigned> feat2;
for (unsigned i=0; i<inst1.getNumberOfFeatures(); i++) {
  feat1[inst1.getFeature(i)]=i;
}
for (unsigned i=0; i<inst2.getNumberOfFeatures(); i++) {
  feat2[inst2.getFeature(i)]=i;
}
float dist=0;

map<string,unsigned>::iterator it;
for (it=feat1.begin(); it!=feat1.end(); it++) {
  if (feat2.find(it->first)!=feat2.end()) {//if and only if it exists in inst2
    dist+=pow( (double) inst1.getScore(it->second) - inst2.getScore(feat2[it->first]) , 2.0);
    feat2.erase(it->first);
  }
  else {
    dist+=pow( (double) inst1.getScore(it->second) , 2.0);
  }
}

for (it=feat2.begin(); it!=feat2.end(); it++) {//for the remaining words …
Run Code Online (Sandbox Code Playgroud)

c++ ram segmentation-fault

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