這個問題是類似於其他發佈的約/bigobj問題,但是,這些並沒有直接解決一般的編譯器選項。這特別回答了編譯器選項的一般問題,並且還處理單獨的特定編譯器選項的問題,甚至還會進一步鏈接其他類似問題,以便比其他問題更容易找到。如何編輯Microsoft Visual Studio 2013編譯器開關?
我需要初始化超過16641個元素的結構。
#include "stdafx.h"
#include <iostream>
struct ArtificialIdiocy{
double x, y, z;
double nx, ny, nz;
};
int _tmain(int argc, _TCHAR* argv[]){
ArtificialIdiocy objectArray[16641];
objectArray[0].x = 1.012709;
objectArray[0].y = 0.069911;
objectArray[0].z = 1.010933;
objectArray[0].nx = 0.165410;
objectArray[0].ny = 0.883572;
objectArray[0].nz = -0.438063;
objectArray[1].x = -1.000000;
objectArray[1].y = 0.014457;
objectArray[1].z = 1.000000;
objectArray[1].nx = 0.179296;
objectArray[1].ny = 0.883511;
objectArray[1].nz = -0.432661;
objectArray[2].x = 1.000693;
objectArray[2].y = 0.011744;
objectArray[2].z = -1.000509;
objectArray[2].nx = 0.172582;
objectArray[2].ny = 0.897122;
objectArray[2].nz = -0.406629;
//等等,等等....
objectArray[16638].x = 0.969018;
objectArray[16638].y = 0.116736;
objectArray[16638].z = 0.967181;
objectArray[16638].nx = 0.437513;
objectArray[16638].ny = 0.782861;
objectArray[16638].nz = 0.442335;
objectArray[16639].x = 0.968575;
objectArray[16639].y = 0.105999;
objectArray[16639].z = 0.998326;
objectArray[16639].nx = 0.561235;
objectArray[16639].ny = 0.718528;
objectArray[16639].nz = 0.410718;
objectArray[16640].x = 0.999139;
objectArray[16640].y = 0.089730;
objectArray[16640].z = 0.997266;
objectArray[16640].nx = 0.608631;
objectArray[16640].ny = 0.688559;
objectArray[16640].nz = 0.394208;
但MSVS2013編譯器告訴我,我的結構有很多部分,並用一個錯誤,說明退出:
錯誤1錯誤C1128:段數超過目標文件格式限制:使用/ bigobj編譯
如何編輯/添加「/ bigobj」編譯器開關?
這種誠實看起來像一個維護的噩夢等待最終在每日跆拳道。您至少應該將其移出到運行時加載的外部資源。 –
@森林與樹木我並不打算在完整的程序中使用它。這只是一個非常基本問題的例子。 :P我不想在示例中添加很多其他代碼,因爲這會爲潛在的新程序員混淆問題。在現實的操作中,我打算把它作爲一個更大的結構體中的構造函數的一部分,它存儲在一個單獨的頭文件中。每個字符,對象等都將從這個頭文件中初始化。 – JoryRFerrell
當1024KB是常見的堆棧限制時,問題的主要部分可能是在堆棧中放置一個780KB陣列。 –