使用sysconf()返回值的算术在C中产生不正确的值

时间:2015-03-29 06:54:39

标签: c linux

我正在尝试启动并运行一个强力程序,并将纯文本存储在缓冲区中,并使用多个其他线程来操作它。因为我正在填充一个缓冲区,所以我想监视我剩下多少免费ram并暂停,而我剩下大约10%的可用RAM。

除了最终的分工之外,一切似乎都能正常运作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include "common.h"

void* Brute_force(void *arg)
{
    int length = *(int*) arg;
    long int percent = 10;
    long int available_pages = sysconf(_SC_AVPHYS_PAGES);
    long int pages = sysconf(_SC_PAGESIZE);
    long int total_pages = sysconf(_SC_PHYS_PAGES);
    long int free_mem = available_pages/total_pages;
    printf("Available_pages: %ld\n",available_pages);
    printf("PageSize: %ld\n",pages);
    printf("Physical_pages: %ld\n",total_pages);
    printf("%ld free memory left\n",free_mem);
    long int multiple = pages * total_pages;
    printf("%ld\n",multiple);
    long int final = available_pages/multiple;
    printf("%ld\n",final);
}

我遇到free_mem问题(因为它们完全相同)。其他所有内容都正确打印出来,但是只要我执行available_pages / multiple并将其打印出来,它就会给我一个零,我不知道从什么时候我做多个/ available_pages它给了我一个非零数字。我假设sysconf()返回一个long,根据手册页,因此我不知道为什么最后一步失败。有什么见解吗?

0 个答案:

没有答案