我认为Linux上没有针对每个环境的变量限制。所有环境变量的总大小在execve()时受到限制。有关更多信息,请参见此处的“参数和环境大小的限制” 。
进程可以使用setenv()或putenv()使环境超出exec分配的初始空间。
这是一个快速而肮脏的程序,它创建一个256 MB的环境变量。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>int main(void){ size_t size = 1 << 28; char *var; var = malloc(size); if (var == NULL) { perror("malloc"); return 1; } memset(var, 'X', size); var[size - 1] = ' '; var[0] = 'A'; var[1] = '='; if (putenv(var) != 0) { perror("putenv"); return 1; } execl("/bin/true", "true", (char *)NULL); perror("execl"); printf("A=%sn", getenv("A")); return 0;}


