尝试制作随机__uint128_t数组失败

我是 C 的新手,正在尝试制作一个包含一百万个随机数__uint128_t的数组。这是我失败的尝试:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#include <time.h>
#include <string.h>


void print128(__uint128_t u) {
  if (u>9) print128(u/10);
  putchar(48+(int)(u%10));
}

typedef __uint128_t u128;
uint64_t wyhash64_x;


uint64_t wyhash64() {
  wyhash64_x += 0x60bee2bee120fc15;
  __uint128_t tmp;
  tmp = (__uint128_t) wyhash64_x * 0xa3b195354a39b70d;
  uint64_t m1 = (tmp >> 64) ^ tmp;
  tmp = (__uint128_t)m1 * 0x1b03738712fad5c9;
  uint64_t m2 = (tmp >> 64) ^ tmp;
  return m2;
}

int main() {
  u128 vals128[1000000];
  u128 lower;
  u128 higher;

  for (int i = 0; i < 1000000; i++) {
    lower = (u128) wyhash64();
    higher = (u128) wyhash64();
    higher = higher << 64;
    vals128[i] = lower + higher;
  }
    print128(vals128[0]);
    printf("n"); 
}

当我运行它时,它编译时没有警告,但会出现段错误。

我究竟做错了什么?

回答

在本地声明大小超过 1,048,576 字节的数组是一个坏主意,因为堆栈大小通常为 1,048,576 (2^20)。

相反,使用 u128* vals128 = malloc(1000000 * sizeof(*vals128));


以上是尝试制作随机__uint128_t数组失败的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>