标签: allocation

在C中动态分配结构

我有动态内存分配问题.这是代码所以请帮忙.

#include <stdio.h>
int i;

typedef struct{
  int A;  
}node;


typedef struct Model
        {                            
            node *m;    
        } Model;
        Model M;

void initialize(Model *a, int size)
{
    a->m = (node*) malloc(size);
}


void model_init(Model *a, int len)
{
    int i;
    for (i=0;i<len;i++) a->m[i].A = 20;
}


int main()
{
initialize(&M ,10);
model_init(&M, 10);
for (i=0;i<10;i++) printf("%d\n",M.m[i].A);
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个具有10个节点的模型,并且我想为变量A中的节点赋值.printf显示(-1819044973,-1819044973,14128019,3969,0,0,0 ......)

我只想说它例如Mm [2] .A = 20

我究竟做错了什么?请帮忙.

TY

c memory struct allocation dynamic

0
推荐指数
1
解决办法
229
查看次数

C++内存分配.矩阵

我研究了两种不同的方法来为矩阵的元素分配内存

方法n.1

int** matrix = new int*[rows];
for (int i = 0; i < rows; ++i)
    matrix[i] = new int[cols];
Run Code Online (Sandbox Code Playgroud)

方法n.2

int** matrix = new int*[rows];
if (rows)
{
    matrix[0] = new int[rows * cols];
    for (int i = 1; i < rows; ++i)
        matrix[i] = matrix[0] + i * cols;
}
Run Code Online (Sandbox Code Playgroud)

我可以弄清楚方法n.1做了什么,但我无法弄清楚究竟应该在方法n.2中做什么if子句(我会在没有它的情况下实现它,并且它不起作用,使用if子句,它...)

编辑:这是一个显示我的问题的代码.为什么加载需要这么长时间(~30秒)?

http://codepad.org/uKvI8Tk3

Codepad拒绝显示输出(超时),所以如果你想运行它,只需自己编译即可.

另外,为什么一旦程序启动就不执行cout <<语句?

c++ memory allocation dynamic matrix

0
推荐指数
1
解决办法
3496
查看次数

与Java的堆分配相比,为什么C++堆分配如此之慢?

我在Java和C++中运行了一些小测试,创建了大量非常小的对象(没有类成员,构造函数中没有任何东西),而Java显然更快(我的意思是C++似乎非常慢).我敢打赌这与JVM有关,但是以哪种方式?

编辑:

我使用的类是这样的(因为我说没有类成员,在构造函数中没有做任何事)在C++中:

class foo{
    public:
        foo(){}
        ~foo(){}
}
Run Code Online (Sandbox Code Playgroud)

在Java中:

public class Foo{
    public Foo(){}
}
Run Code Online (Sandbox Code Playgroud)

我做的小测试只是关于在一个循环中分配大量的对象(连续大约1000000000).我在使用Linux的同一台机器上使用了GCC 4.7.2和Java 1.7到OpenJDK的实现.

我敢打赌,它确实与内存池分配有关,这表明JVM拥有不需要的内存.

我仍然感到困惑,因为我认为JVM实际上会更慢,计算指针引用和分配内存.

c++ java heap performance allocation

0
推荐指数
1
解决办法
1584
查看次数

是否将指针设置为空分配的内存?

我正在阅读一个将指针初始化为空的代码,最初我认为该代码没有将新内存分配给用于存储二维值数组的指针(它确实如此),这让我想知道,是一个初始化为空指针的指针分配的内存?

class Int8_tSet : public GridSet
{
public:
  int8_t** set;
//
//
  Int8_tSet():set(0) {}
  Int8_tSet( const Int8_tSet& x ):set(0) {copy(x);}
  virtual ~Int8_tSet() { Free2DArray(set);}
//
// --- opeartor
  int8_t  operator() ( IntVector2D x ) const {return set[x.i][x.j];}
  int8_t& operator() ( IntVector2D x ) {return set[x.i][x.j];}
// --- function
  void Set();
  void Set(int8_t val);
  void Set( IntVector2D x ){ NS_GRIDDATA::Set(x,*this,(int8_t)-1); }
  void Set( IntVector2D x,int8_t val){ NS_GRIDDATA::Set(x,*this,val); }
  void Switch();
// --- output & input
  void Output(std::ostream& out ) const;
  void …
Run Code Online (Sandbox Code Playgroud)

c++ memory null pointers allocation

0
推荐指数
1
解决办法
3634
查看次数

C++中的双指针数组

我正在阅读一个关于 BTree 的程序,在那里我遇到了这个:BTreeNode **C。我知道它是一个二维数组,但它被初始化为C=new BTreeNode *[2*t];. 我无法理解这一点:这是一个具有动态行和 2t 列的 2d 数组吗?谢谢。

c c++ arrays allocation

0
推荐指数
1
解决办法
2万
查看次数

malloc的有趣行为()

这是我为GCC编译器编写的代码.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *p;
    p = (int *)malloc(9 * sizeof(char));
    p[0] = 2147483647;
    p[1] = 2147483647;
    p[2] = 1025;
    printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

1, 2147483647, 2147483647, 1025
Run Code Online (Sandbox Code Playgroud)

我的问题是,虽然我只为指针分配了9个字节,但它似乎使用了所有12个字节.结果是相同的(除非编译器警告),如果我转换(char *)而不是(int*).分配malloc()是完整的圆圈吗?即它总是以指针的数据类型的倍数分配,而不管我们分配的是什么?或者具体实施?

c malloc pointers allocation

0
推荐指数
1
解决办法
124
查看次数

如何在 Java 中分配数组数组?

我想为数组数组动态分配内存,知道行数将为 n,但我不想为每行分配比需要更多的内存,这将是 i = 1:n ,每行的元素数 = i,我事先知道这一点。

    int [] a = new int[n];
    for (int i=0; i<n; i++)
Run Code Online (Sandbox Code Playgroud)

我刚刚开始学习 Java,我是新手。据我所知,第一行将为 n 个元素(行数)分配内存,我想要做的是在每次迭代时创建一个新的 i 个元素数组。

java arrays allocation dynamic-memory-allocation

0
推荐指数
1
解决办法
1599
查看次数

C++ 构造函数内部会发生什么?

我想知道在 C++ 中调用类的构造函数时会发生什么。更具体地说,调用了哪些其他函数以及如何调用。是调用某个内置函数在栈上构造对象,还是调用malloc在堆上构造对象new?是否有使用的默认分配器?

一般来说,是否可以在不调用构造函数的情况下使用类和对象?

编辑:一个可能有助于我试图解决的好问题是:为什么构造函数不返回任何东西?最初,我认为新手程序员会期望构造函数返回对象,但事实并非如此。会发生什么?

c++ constructor allocation

0
推荐指数
2
解决办法
398
查看次数

如何使用同一个对象初始化 ArrayList x 次?

有没有办法用X个相同的对象快速初始化一个新的ArrayList对象?

这是一个示例代码:

private List<String> initStringArrayList(int size, String s) {
  List<String> list = new ArrayList<>(size);
  while (size-- > 0) {
    list.add(s);
  }
  return list;
}
Run Code Online (Sandbox Code Playgroud)

我想要得到相同的结果,但对于大的“大小”值来说要快得多。

当然,我可以使用这段代码:

private List<String> initStringArrayList(int size, String s) {
  String[] array = new String[size];
  Arrays.fill(array, s);
  return new ArrayList<>(Arrays.asList(array));
}
Run Code Online (Sandbox Code Playgroud)

但是 ArrayList<>() 的构造函数会复制整个数组,而不是在内部使用它。这是不可接受的。

还有其他方法吗?我需要一个 ArrayList 作为结果,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。

谢谢您的任何答复!

java allocation initialization arraylist

0
推荐指数
1
解决办法
1820
查看次数

为指针*变量分配了多少内存?

我的问题:

  • int
  • float
  • char
  • str

这些 var 类型都有为其分配的标准化字节分配。但我从来没有了解过这一点的指针:

这些“地址”存储变量,其内容看起来只是一系列字母数字字符。

C++代码:

int *ptr1;
char *ptr2;
void *ptr3;
Run Code Online (Sandbox Code Playgroud)

那么上面列出的指针的标准内存分配是什么呢?一般来说呢?

c++ pointers allocation memory-address

0
推荐指数
1
解决办法
444
查看次数