You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Tiny C Compiler创建超大数组编译及运行失败求助

问题描述

环境:Windows 10,16GB内存,使用Tiny C Compiler(TCC)编译C代码。

编译代码:

#include <stdio.h>
#define len 900000000

int phi[len];

int main() {
  for (int i = 2; i < len; i++) {
    phi[i] = i - 1;
  }
  phi[0] = 0;
  phi[1] = 1;
  for (int i = 2; i < len; i++) {
    for (int j = 2 * i; j < len; j += i) {
      phi[j] -= phi[i];
    }
  }
  return 0;
}

遇到的问题:

  1. 当len=900000000时,编译报错:

error: unknown type size

  1. 将len改为500000000后可编译,但运行时弹出错误:

This app can't run on your PC
To find a version for your PC, check the software publisher.

解决方案(无需重写代码)

1. 强制编译为64位程序

TCC默认编译32位程序,而32位程序的虚拟地址空间上限仅4GB:

  • len=900000000时,数组总大小为900000000 * 4 = 3.6GB,接近32位地址空间上限,TCC无法处理这么大的全局数据段,触发编译错误。
  • 即使len=500000000(总大小2GB),32位程序运行时也可能因内存分配触发系统兼容性限制,导致启动失败。

使用TCC的-m64参数编译64位程序,命令如下:

tcc -m64 your_source_code.c -o phi_calculator.exe

64位程序的虚拟地址空间远超数组需求,搭配16GB物理内存,编译和运行问题均可解决。

2. 确认TCC支持64位编译

如果执行-m64参数报错,说明当前TCC版本不支持64位编译,需更换为支持64位的最新稳定版TCC。

错误原因补充
  • 编译错误unknown type size:32位编译模式下,TCC无法处理超过内部限制的超大全局数组尺寸。
  • 运行时兼容性错误:32位程序尝试分配接近2GB的全局内存时,触发Windows内存保护或兼容性机制,导致程序无法启动。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:42:39