#include #include #define MULTIPLIER 3 int old1(unsigned int heap_pages) { int heap_parallel_workers = 1; int heap_parallel_threshold = 1024; while (heap_pages >= (unsigned int) (heap_parallel_threshold * MULTIPLIER)) { heap_parallel_workers++; heap_parallel_threshold *= MULTIPLIER; if (heap_parallel_threshold > INT_MAX / MULTIPLIER) break; /* avoid overflow */ } return heap_parallel_workers; } int new1(unsigned int heap_pages) { int heap_parallel_workers = 1; int heap_parallel_threshold = 1024; while (heap_pages >= (unsigned int) (heap_parallel_threshold*heap_parallel_workers*heap_parallel_workers)) { heap_parallel_workers++; if (heap_parallel_threshold *heap_parallel_workers*heap_parallel_workers> INT_MAX ) break; /* avoid overflow */ } return heap_parallel_workers; } int main(void) { for (unsigned int pages = 128; pages != 0; pages <<= 1) { printf("Table Size = %llu MB old workers = %d, new workers = %d\n", ((unsigned long long) pages) * 8192 / 1024 / 1024, old1(pages), new1(pages)); } return 0; }