标签: allocation

代码需要太多内存

我正在将一些代码移植到另一个结构:

class EnvironObject
{
   protected:
      vector<float> mX, mY, mXSpeed, mYSpeed;
      int mMaxObjects;

   public:
      virtual void init(int maxObjects);
      virtual void setLimit(int limit);
      virtual int getLimit();
      virtual void update(float arg) = 0;
};

void EnvironObject::setLimit(int limit)
{
   mMaxObjects = limit;

   mX.resize(limit, 0); mY.resize(limit, 0);
   mXSpeed.resize(limit, 0); mY.resize(limit, 0);
}

int EnvironObject::getLimit()
{
   return mMaxObjects;
}

void EnvironObject::init(int maxObjects)
{
    mX = mY = mXSpeed = mYSpeed = std::vector<float>(mMaxObjects);

    fill(mX.begin(), mX.end(), 0);
    fill(mY.begin(), mY.end(), 0);
    fill(mXSpeed.begin(), mXSpeed.end(), 0);
    fill(mYSpeed.begin(), mYSpeed.end(), 0);

    /*mX.reserve(mMaxObjects * …
Run Code Online (Sandbox Code Playgroud)

c++ memory allocation exception

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

如何坚持NSColor?它没有分配,例如UIColor alloc

我正在尝试将工作的iPhone代码移植到Mac(iOS到OSX - 我相信?)

工作的iPhone版本是

...
return [[UIColor alloc] initWithRed:r green:g blue:b alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)

不工作的Mac尝试是

...
return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}                                       
Run Code Online (Sandbox Code Playgroud)

但是当我后来访问容器时,NSColor就不存在了.但是当我尝试各种版本的[NSColor alloc]时,它们都没有"工作".

我的问题是,我如何创建一个持久的NSColor(以后,我必须取消分配)?

macos memory-management allocation objective-c

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

对象创建差异

创建对象的以下两种方法有什么区别?

Test* t = new Test();
Run Code Online (Sandbox Code Playgroud)

Test* t;
Run Code Online (Sandbox Code Playgroud)

你对第二个样本的答案与我认为它会做的事情相匹配(没有创建对象)但是

class Test {
        public:
                void bla(void) {
                        std::cout << "test" << std::endl;
                };
};

int main(void) {
        Test* test;
        test->bla();
}
Run Code Online (Sandbox Code Playgroud)

给我输出"测试"......所以实际上有一个对象

c++ allocation object

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

内存中char指针的C字节

我想计算一个char指针占用内存的字节数.指针指向一个包含100个字符的字符串.

根据以下程序,char需要4个字节

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

int main(void)
{
  char b;
  b = 'b';
  printf("%p\n",&b);

  system("pause");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

指针是否相同?因此,对于100个字符串,它在内存中保存了400个字节?

c pointers allocation

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

for循环中的分配时间

我有一个正常工作的for循环.我添加了一个新的UIVIew子类分配,在每个循环迭代中完成:

  for (n=something; n>0; n--)
{
   //(...)

    MyView* theview=[[myView alloc]initWithFrame:self.frame];
    float y=sin(DEGREES_TO_RADIANS(currentAngle));
    float x=cos(DEGREES_TO_RADIANS(currentAngle));

    theview.point1=CGPointMake(x, y);  
  // printf x & y here

    [self addSubview:theview];
}
Run Code Online (Sandbox Code Playgroud)

事实上,视图是分配的,但是当我查看视图时,循环内定义的点与point1不同.

实际上,视图的所有迭代似乎都是在循环结束之后分配的,正如在视图的drawrect方法中的printf所述,在调用循环的所有迭代中的所有printf之后调用该方法.如果不清楚,我会看到类似的东西:

x = 1 Y = 1 x = 2 y = 2 x = 3 y = 3 printf来自视图printf来自视图printf的视图

.为什么?提前致谢!

for-loop allocation objective-c ios

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

C#中的FIFO字符串分配

我目前正在创建一个我正在创建的程序的问题.我已经找到了答案,但它与我想要发生的事情有所不同,因为这里给出的是字符串.

我们被要求创建一个FIFO分配,这是程序作为控制台应用程序的预期流程:

输入号码.页面框架:2

输入号码.要插入的页面数:4

要插入的页面:A

插入帧1.中断生成.

要插入的页面:B

插入帧2.中断生成.

要插入的页面:A

插入失败.A是常驻页面.

要插入的页面:C

插入帧1.中断生成.

根据FIFO分配算法,如果插入新的不同页面,它将删除插入帧中的最早页面.如果页面已经在框架中,则页面插入将被拒绝.

我已经做了一个,虽然我目前陷入困境,试图弄清楚如何在数组中找到最早插入的元素.

我希望你能帮助我.我已经花了很多时间,但我只是不知道该怎么做.这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        int f, p, interrupt;

        Console.WriteLine("Enter the number of frames: ");
        f = Int32.Parse(Console.ReadLine());
        string[] frame = new string[f];
        Console.WriteLine("Enter the number of pages: ");
        p = Int32.Parse(Console.ReadLine());

        for (int i = 0; i < p; i++) {


            Console.WriteLine("Page to be inserted: ");

            string x = Console.ReadLine();

            if (frame.Contains(x))
            {

                Console.WriteLine(x + " is a resident page.");


            } …
Run Code Online (Sandbox Code Playgroud)

c# memory arrays allocation fifo

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

如何在Objective-C中初始化对象

我不确定如何初始化Objective-C类中的各种属性.请假设我在你的答案中是Objective-C的新用户......

我有以下课程:

考试班

@interface Test : NSObject
@property (nonatomic, strong) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)

TestManager类

@interface TestManager : NSObject
@property (nonatomic, strong) NSMutableArray *tests; // array of Test objects (array size unknown until runtime)
@end
Run Code Online (Sandbox Code Playgroud)

控制器类

@interface TestController : NSObject
@property (nonatomic, strong) TestManager *aManager;
-(void)initManager;
-(void)doSomething;
@end
Run Code Online (Sandbox Code Playgroud)

我想要一个像initManager被调用的方法:

-(void)initManager
{
    // how can I init the aManager which will have an array of Test objects
}
Run Code Online (Sandbox Code Playgroud)

它将自动分配一个对象数组,以存储在manager类中,这样我就可以执行以下操作:

-(void)doSomething
{
   NSString *name = ((Test *)[self.aManager.tests objectAtIndex:0]).name;
}
Run Code Online (Sandbox Code Playgroud)

我甚至不确定initManager是否是正确的使用方法 - …

memory-management allocation objective-c

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

为什么人们在某些情况下使用变量?

我知道这个问题标题看起来很可怕,但事实并非如此.抱歉!

那么,创建一次性/不可更改的"变量"有什么意义呢?

假设我在Person对象中有一个名为"name"的属性.

const Person = {
    name: 'Luis Felipe Zaguini'
};
Run Code Online (Sandbox Code Playgroud)

好的.所以,看到人们这样做是非常普遍的:

let personName = Person.name;
console.log(`I've written my name, and it is ${personName}.`);
Run Code Online (Sandbox Code Playgroud)

就是这样.在大多数情况下,变量只使用一次.或者,有时,它在其他语句中被引用,但是你知道,它是无用的,因为有一种方法可以在不设置新变量的情况下引用它.

从技术上讲,你浪费CPU内存,为无用的东西分配内存,因为事实上,你可以Person.name多次输入,并执行以下操作:

console.log(`I've written my name, and it is ${Person.name}.`);
Run Code Online (Sandbox Code Playgroud)

此外,您正在浪费时间并在代码中添加更多行.我是否过度了?很多程序员都会做这种事情,但就个人而言,它似乎并不适合我.

javascript memory variables allocation

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

返回接口{}而不是int64时的额外分配

我有一个生成随机的函数,int64并返回interface{}如下:

func Val1(rnd rand.Source) interface{} {
 return rnd.Int63() 
} 
Run Code Online (Sandbox Code Playgroud)

现在考虑这个函数,它做同样的事情,但返回一个 int64

func Val2(rnd rand.Source) int64 {
 return rnd.Int63()
}
Run Code Online (Sandbox Code Playgroud)

我使用this(go test -bench=. -benchmem)对这两个函数进行了基准测试:

func BenchmarkVal1(b *testing.B) {
    var rnd = rand.NewSource(time.Now().UnixNano())
    for n := 0; n < b.N; n++ {
        Val1(rnd)
    }
}

func BenchmarkVal2(b *testing.B) {
    var rnd = rand.NewSource(time.Now().UnixNano())
    for n := 0; n < b.N; n++ {
        Val2(rnd)
    }
}
Run Code Online (Sandbox Code Playgroud)

得到了以下结果:

BenchmarkVal1-4    50000000         32.4 ns/op         8 B/op          1 allocs/op
BenchmarkVal2-4    200000000 …
Run Code Online (Sandbox Code Playgroud)

memory types allocation object go

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

GetMem和AllocMem有什么区别?

在Delphi中,我看到了几个可以用来分配内存的类似函数,例如GetMem和AllocMem。它们之间有什么区别?

我阅读了文档,发现分配后GetMem不会初始化内存,而AllocMem会初始化。

那我在调用GetMem之后是否需要初始化内存?医生说是。但是我在某些Delphi源代码中看到它们不调用Initialize。

以及在使用完内存后是否需要最后确定内存?我在一些Delphi源代码中看到了,但是确实没有。

谢谢

memory delphi allocation

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