如何将内存分配给大小为10 ^ 9的二维数组

时间:2019-04-10 09:48:59

标签: c++ arrays

我希望2d数组最多接受10 ^ 9的输入。 行和列最多可以达到10 ^ 9。 由于动态分配给我带来了运行时错误,我该如何分配它。

我动态分配了内存,但是当输入为10 ^ 5或更多时,我会遇到运行时错误。 我知道数组将使用10 ^ 9 x 10 ^ 9 x 4字节的内存,而我的堆无法处理该内存,所以我该如何分配它。

public class UserProfile {
    @ToString.Exclude
    @ApiModelProperty(value = "Linking the UserProfile to the base User object that is used for authentication")
    @OneToOne(optional = false)
    // Note: Not marking with 'NotNull' annotation since we will not want to update the User object when upserting the UerProfile
    @JoinColumn(unique = true, nullable = false, insertable = true, updatable = false)
    @JsonIgnoreProperties("userProfile")
    private User user;
}

我希望代码在行和列为10 ^ 5时接受输入。 但是我正在关注:

long long int n,m,k,ans=0;
        cin>>n>>m>>k;
        long long int**a=new long long int*[n+2];
        for(long long i=0;i<=n+2;i++){
            a[i]=new long long int[m+2];
        }
        for(long long int i=0;i<=n+1;i++){
            for(long long int j=0;j<=m+1;j++)
                a[i][j]=0;
        }

1 个答案:

答案 0 :(得分:4)

10 ^ 9甚至有1个字节元素也是1千兆字节,二维数组是10 ^ 9 ^ 2或1埃字节。使用64位整数,即8艾字节。因此,您需要重新考虑这一点。我认为您实际上将没有绝大多数数据?

例如,您可以使用"rules": { ".read": "auth != null", ".write": "auth != null" } def punto_en_poligono(x, y, poligono): i = 0 j = len(poligono) - 1 salida = False for i in range(len(poligono)): if (poligono[i][1] < y and poligono[j][1] >= y) or (poligono[j][1] < y and poligono[i][1] >= y): if poligono[i][0] + (y - poligono[i][1]) / (poligono[j][1] - poligono[i][1]) * (poligono[j][0] - poligono[i][0]) < x: salida = not salida j = i return salida humans1 = e.inference(recto, resize_to_default=(w > 0 and h > 0), upsample_size=args.resize_out_ratio) poly1 = geometry.Polygon([[450,350],[478,0],[638,0],[638,350],[450,350]]) for j in humans1: for i in j.body_parts: try: pos_X = int(j.body_parts[i].x*960) pos_Y = int(j.body_parts[i].y*640) is_Inside = punto_en_poligono(pos_X,pos_Y,poly1) except: print("Not working")

std::map

您将需要为其定义哈希。在这种情况下,您也可以将两个整数组合为高位和低位,因为长长通常足以容纳两个整数。

std::unordered_map

还有其他方法可以执行“稀疏数组”,并且可能很大程度上取决于您的数据,例如,您是否期望“集群”或所有分布均匀的数据?什么是读/写模式?