我一直在寻找一种方法将函数动态加载到c ++中一段时间,我想我终于搞清楚了.这是计划:
- 将函数作为字符串传递给C++(通过套接字连接,文件或其他东西).
- 将字符串写入文件.
- 让C++程序编译并执行它.如果有任何错误,请抓住并返回.
- 使用新函数新执行的程序将函数的内存位置传递给当前正在运行的程序.
- 将函数的位置保存到函数指针变量(函数将始终具有相同的返回类型和参数,因此这简化了指针的声明).
- 使用函数指针运行新函数.
问题是,在第4步之后,我不想保持新程序运行,因为如果我经常这样做,许多正在运行的程序将会吸收线程.有没有办法关闭新程序,但保留存储新功能的内存位置?我不希望它在被使用时被覆盖或提供给其他程序.
如果你们对其他步骤也有任何建议,那也值得赞赏.可能还有其他库可以做与此类似的事情,可以推荐它们,但这是我想要研究的方法 - 如果不是为了完成它,那么知道如何这样做.
编辑:我知道动态链接库.这是我正在深入研究的内容,以便更好地理解C++中的工作原理.
不久前,当我写下这样的东西时,我问自己:
char* first(int howMany){
return (char*)malloc(howMany);
}
int main(){
char*t;
int one=20;
t=first(20);
}
Run Code Online (Sandbox Code Playgroud)
这段代码在codepad.org崩溃,但在Mepis Linux 11.04中,它只是引发了一些警告.
但是,如果我为C++写这样的东西:
char* first(int howMany){
return new char [howMany];
}
int main(){
char*t;
int one=20;
t=first(20);
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.
我的问题是:
当我尝试时,为什么C代码不能正常工作以及会发生什么
return (char*)malloc(howMany)?
PS:如果我尝试在Objective-C中使用这个函数会发生什么?
(NSArray*) first(){
return [NSArray array];
}
Run Code Online (Sandbox Code Playgroud) 我正在编码的程序现在制作了一个非常庞大的数据项列表.
现在,我可以将此列表设置为全局(可用于其他模块中的其他功能),并可用于所有其他模块.或者,我也可以将它们作为模块中函数的函数参数传递.
请注意,我正在谈论的这个庞大的数组不会在其他模块的函数中被修改,它们只是读取数据并将其用于计算和数据统计等.
那么,两种内存消耗最少的方法呢?
如果通过传入函数,如果语言使得巨大列表的本地副本即使函数没有修改它......那将是内存消耗的倍增,这不是好事.如果发生这种情况,我可以将其全局化并使用它.我对python的内存管理有这个疑问,因为当我曾经写过一个玩具语言时,我包含了这个特殊的问题.即,只有在编辑过的时候,参数数据才会被复制.否则,它总是指向原始数据.
python memory garbage-collection memory-management duplicate-data
我正在以下列方式创建一个NSMutable数组:
-(NSArray*)createArrayFromString:(NSString*)str
{
NSArray *arr = [str componentsSeparatedByString:@" "];
NSMutableArray *result = [NSMutableArray arrayWithCapacity:[arr count]];
for(NSString *s in arr){
if([s length]>0){
[result addObject:[s retain]];
}
}
return (NSArray*) result;
}
Run Code Online (Sandbox Code Playgroud)
这是调用方法,它将接收到的数组元素放入Chapter对象的属性resRefs中:
-(Chapter*)createChapter:(CXMLNode*)node
{
Chapter *chapter = [[Chapter alloc] init];
chapter._id = [[(CXMLElement*)node attributeForName:@"id"] stringValue];
chapter.title = [[(CXMLElement*)node attributeForName:@"title"] stringValue];
chapter.text = [node stringValue];
[chapter.pids addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"pids"]stringValue]]];
[chapter.resRefs addObjectsFromArray:[self createArrayFromString:[[(CXMLElement*)node attributeForName:@"resRefs"]stringValue]]];
return chapter;
}
Run Code Online (Sandbox Code Playgroud)
这是问题:
没有保留电话
[result addObject:[s retain]];
Run Code Online (Sandbox Code Playgroud)
我无法从我的ViewController访问NSString元素(EXC_BAD_ACCESS)
我正确使用保留在这里吗?
编辑:
变
[[result addObject:s] retain];
Run Code Online (Sandbox Code Playgroud)
成
[result addObject:[s retain]]; …Run Code Online (Sandbox Code Playgroud) 我试图找出前3个小时的这个错误.通过搜索,我已经知道这个错误与内存管理有关,但我没有弄清楚我做错了什么.
我已经宣布了这4个标签:
@interface InteractiveHistory : UITableViewController {
UILabel *date;
UILabel *startTime;
UILabel *cal;
UILabel *duration;
}
Run Code Online (Sandbox Code Playgroud)
然后创建属性并合成它们.在viewDidLoad中,我初始化了所有这样的:
date = [[UILabel alloc] init];
Run Code Online (Sandbox Code Playgroud)
我也在dealloc()方法中释放它们.
我想要做的是使用这4个标签在表格的单元格中写入一些文本.文本将取决于indexPath.
在cellForRowAtIndexPath方法中,只显示2个标签并指示错误行:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
NSLog(@"constructing cell");
//set up labels text
date = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Date"]];
NSLog(@"%@",date.text); //App crashes at this line
[date setTag:1];
startTime = [NSString stringWithFormat:@"%@",[[int_data objectAtIndex:indexPath.row] objectForKey:@"Start …Run Code Online (Sandbox Code Playgroud) 在调用free()函数之后,动态分配的内存的指针指向什么.指针是否指向NULL,或者它仍指向在解除分配之前指向的相同位置.free()的实现是否具有某种标准,或者它在不同平台中的实现方式不同.
uint8_t * pointer = malloc(12);
printf("%p", pointer); // The current address the pointer points to
free (pointer);
printf("%p", pointer); // must it be NULL or the same value as before ?
Run Code Online (Sandbox Code Playgroud)
编辑:我知道printf会产生相同的结果,我只想知道我是否可以依靠不同的实现.
有没有办法让我获得应用程序所需的内存和处理器能力.当我的一个应用程序一直冻结它正在运行的计算机时,我最近遇到了非常不愉快的经历.这显然与缺乏硬件能力有关,因为它完全适用于我用于测试目的的更强大的计算机,其中应用程序运行良好.所以我的问题是 - 有没有办法计算平稳运行应用程序所需的硬件功率量?几乎所有的应用程序都是用C#完成的,所以我需要一种可以使用这种应用程序的方法.谢谢
我花了两天的时间改变它与ARC一起工作后,我的应用运行缓慢.
我犯了一些错误让它慢了?或者ARC有点慢?
我想知道,如果我使用new关键字在main中创建一个对象,然后将该对象(指针)设置为由另一个类的成员指向,将原始指针设置为null,我将在哪里删除已分配的内存?我可以在第二个类的析构函数中做到这一点,但如果该对象没有动态分配怎么办?
一些代码作为例子:
World world;
Player* newPlayer = new Player("Ted");
world.setPlayer(newPlayer);
newPlayer = 0;
Run Code Online (Sandbox Code Playgroud)
所以现在World中的'player'成员变量指向newPlayer分配的内存,newPlayer指向null.当我完成World对象时,我应该如何释放这个内存?
c++ ×4
objective-c ×4
c ×2
ios ×2
benchmarking ×1
c# ×1
cocoa-touch ×1
ios4 ×1
memory ×1
python ×1