gpt4 book ai didi

c++ - 使用 g++ 避免 C++ 程序中的小页面错误

转载 作者:行者123 更新时间:2023-11-30 04:32:00 25 4
gpt4 key购买 nike

我正在尝试解决这个难题:Shipping Coding Puzzle .这是我到目前为止提出的代码:

#include <fcntl.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include <set>
using namespace std;
struct Container
{
Container(int c, int w) : cost(c), weight(w){}
int cost;
int weight;
bool operator<(const Container& c) const
{
return double(cost)/weight < double(c.cost)/c.weight;
}
};
int main(int argc, char** argv)
{
int fd = open(argv[1], O_RDONLY);
char* pContent = (char*)mmap(NULL, 128 * sizeof(int), PROT_READ, MAP_PRIVATE, fd, 0);
pContent += 8;
stringstream ss(pContent);
int unload = 0;
ss >> unload;
set<Container> containers;
int cost = 0, weight = 0;
while(ss >> cost)
{
ss >> weight;
containers.insert(Container(cost, weight));
}

const Container& best = *containers.begin();
cost = best.cost * ceil(double(unload)/best.weight);
printf("%d\n", cost);
return 0;
}

我知道这个逻辑中可能存在一些错误。但我的问题与逻辑无关。当我提交此代码时,它成功运行,但我得到的分数较低,因为它表示次要页面错误数为 409。当我看到排行榜时,有人提交了带有轻微页面错误的 C++ 代码 69。有什么方法可以控制这些小页面错误吗?可能正在使用一些 g++ 标志?现在我的 make 文件非常简单:g++ -o MyExe MyExe.cc

最佳答案

无论 Gild 用于判断这些的算法和运行时环境,您都会受到摆布。我认为编译器标志可能是一条红鲱鱼;我怀疑以“ Release模式”提交会为您打开 -O2 或 -O3。

我怀疑这是优化内存使用的问题,可能是内存局部性。例如,stringstream 和 set 可能会变得非常昂贵;站在你的立场上,我会开始寻找是否有另一种方法,或许使用更量身定制的算法。

关于c++ - 使用 g++ 避免 C++ 程序中的小页面错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com