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; }
遇到的问题:
- 当
len=900000000时,编译报错:
error: unknown type size
- 将
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
相关产品推荐
相关产品推荐

