小编Eph*_*era的帖子

基本OS X程序集和Mach-O格式

我对在x86-64Mac OS X平台上进行汇编编程很感兴趣.我遇到了关于创建一个248B Mach-O程序的页面,这使我得到了Apple自己的Mach-O格式参考.之后我想我会在Xcode中制作同样简单的C程序并检查生成的程序集.

这是代码:

int main(int argc, const char * argv[])
{
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

但是生成的组件是334行,包含(基于248B模型)大量的过量内容.

首先,为什么在C可执行文件的Release版本中包含了如此多的DWARF调试信息?其次,我注意到Mach-O头数据被包含4次(在不同的DWARF相关中sections).为什么这有必要?最后,Xcode程序集包括:

.private_extern _main
.globl  _main
_main:
    .cfi_startproc
Run Code Online (Sandbox Code Playgroud)

但是在248B计划中,这些都无处可见 - 程序开始于_start.如果所有程序都按照定义开始,那怎么可能main呢?


全Xcode组装:

# Assembly output for main.c
# Generated at 4:04:08 PM on Sunday, January 20, 2013
# Using Release configuration, x86_64 architecture for Tiny target of Tiny project

    .section    __TEXT,__text,regular,pure_instructions
    .file   1 "/Users/####/Desktop/Tiny/Tiny/main.c"
    .section    __DWARF,__debug_info,regular,debug
Lsection_info:
    .section    __DWARF,__debug_abbrev,regular,debug
Lsection_abbrev: …
Run Code Online (Sandbox Code Playgroud)

macos assembly x86-64 mach-o dwarf

4
推荐指数
1
解决办法
2914
查看次数

用C++ lambdas模仿Obj-C块行为

是否可以像使用Objective-C块一样使用C++ lambdas?

举例来说,以下Objective-C代码:

@interface MyClass : NSObject
// ...
- (void)myMethodWithBlockParam:(void(^)(void))block;
//
@end
Run Code Online (Sandbox Code Playgroud)

该消息将按如下方式发送:

[myClassInstance myMethodWithBlockParam:^{
     // Do something inside block
}];
Run Code Online (Sandbox Code Playgroud)

有没有办法在lambdas的C++中实现相同的效果?

c++ lambda block objective-c c++11

4
推荐指数
1
解决办法
600
查看次数

使用std :: list放置新的

我希望实现一个(双重)链接列表,它只在placement new内部调用,将所有内存定向到一个分配有以下内容的池:

char *memPool = new char[4096]; // One-off normal 'new'
Run Code Online (Sandbox Code Playgroud)

最初我打算实现我自己的类,它接受一个(管理一个)预分配内存池的指针.但是我想首先确定我无法达到同样的结果std::list.特别是,DavidRodríguez对这个SO问题的回答的第三部分让我担心.

它使这个意义上说std::list必须调用newdelete其组件节点,但我想修改此行为,使所有节点与被分配placement new到我的自定义池.因此我的问题是:

有没有办法指定placement new std::list如下:

std::list<std::shared_ptr<Cls>> myList = new (pool.getFreeAddr()) list<Cls>;
Run Code Online (Sandbox Code Playgroud)

还应该使用自定义分配器分配其节点,以便一切都严格存储在我自己的内存池中?

(注意:我知道需要使用自定义分配/删除功能,shared_ptrs如果我也想在自定义内存池中使用它们.)

c++ memory-management list placement-new c++11

4
推荐指数
1
解决办法
902
查看次数

可以在运行时优化浮点乘以零吗?

我正在编写一个算法来查找nxn矩阵的逆.让我们来看一个3x3矩阵的具体情况.

手动反转矩阵时,通常会查找包含一个或多个零的行/列,以便更快地执行行列式计算,因为它会消除您需要计算的项.

在C/C++中遵循此逻辑,如果您标识具有一个或多个零的行/列,则最终将得到以下代码:

float term1 = currentElement * DetOf2x2(...);
//           ^
//           This is equal to 0.
//
// float term2 = ... and so on.
Run Code Online (Sandbox Code Playgroud)

由于编译器无法知道currentElement在编译时将为零,因此无法对其进行优化float term = 0;,因此浮点乘法将在运行时执行.

我的问题是,这些零值是否会使浮点乘法更快,或者乘法是否会花费相同的时间,而不管其值是currentElement多少?如果无法在运行时优化乘法,那么我可以删除搜索包含零的行/列的逻辑.

c c++ floating-point optimization multiplication

3
推荐指数
2
解决办法
1861
查看次数

从供应商函数填充数组的一种Swifty方法

假设我有一个生成随机Ints的函数: func random() -> Int

是否有一种"Swifty"方式使用该函数来填充Ints数组?目前我有以下相当不优雅的代码:

array.reserveCapacity(arraySize) // array is [Int]
for _ in 0 ..< arraySize {
    array.append(random())
}
Run Code Online (Sandbox Code Playgroud)

但感觉必须有比这更好的方法.

arrays swift

3
推荐指数
1
解决办法
42
查看次数

如何保证C++类型的位数

我正在寻找typedef我自己的算术类型(例如Byte8,Int16,Int32,Float754等),目的是确保它们包含特定数量的位(并且在浮点数的情况下,遵循IEEE754格式).我怎样才能以完全跨平台的方式做到这一点?

我已经在这里和那里看到了C/C++标准的片段,并且有很多:

" 类型至少 X字节"

并不是很多:

" 类型恰好 X字节".

鉴于这typedef Int16 unsigned short int可能不一定会导致16位Int16,是否有一种跨平台的方式来保证我的类型将具有特定的大小?

c++ types cross-platform typedef

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

Alloc-init UIStoryboard中的对象

考虑一种情况,即故事板文件中的对象链接到a IBOutlet,如下所示.

@property (nonatomic, strong) IBOutlet UIImageView *imageView;
Run Code Online (Sandbox Code Playgroud)

保留在自己的设备上,ViewController将很高兴地加载并在正确的框架内显示正确的图像,如Interface Builder中所确定的那样.但是,如果将以下代码添加到View Controller的viewDidLoad方法中,则会实现(显然)相同的结果.

- (void)viewDidLoad {
    _imageView = [[UIImageView alloc] init];
    //...
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着程序化的alloc-initing IBOutlets是完全可选的?或者这条线的增加是否会产生略微不同的结果?

我问,因为我总是在实现中添加alloc-init,然后在我的最新项目中我忘记了它,令我惊讶的是,它仍然完全符合预期.

objective-c interface-builder ios uistoryboard

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

编译器是否优化大小为0的结构?

如果我有一个定义的结构,如下所示:

struct blank {
    int : 0;
};
Run Code Online (Sandbox Code Playgroud)

编译器会在运行时将其优化为零吗?

我问,因为这个相当受欢迎的SO问题.我想在我自己的C/C++代码中使用类似的编译时检查.我正在尝试使程序尽可能最佳,所以如果我只是将它们用于编译时检查,我不希望这些空结构在运行时闲置.

另一方面,是否有一种C++ - 惯用的方式来实现与链接相同的结果?

c++ struct compile-time compiler-optimization

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

在运行时从类外部访问Objective-C ivar

我知道这个想法完全打破了封装,但是说我有以下类扩展:

@interface MyClass () {
    int reallyImportantIvar;
}
// ...
@end
Run Code Online (Sandbox Code Playgroud)

通常,类的行为应该在Objective-C层内部 - 发送和接收消息等.但是有一个('公共')子例程,我需要最好的性能和非常低的延迟,所以我更喜欢使用一个C方法.当然,如果我这样做,我就无法再访问reallyImportantIvar,这是我的性能关键任务的关键.

看来我有两个选择:

  1. 将实例变量改为静态变量.
  2. 通过Objective-C运行时直接访问实例变量.

我的问题是:选项2是否可能,如果可行,它的开销是多少?(例如,我还在查看O(n)算法来查找类的实例变量吗?)

c objective-c objective-c-runtime

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

Xcode 5中的标签栏图标太大

Tab Bar有问题.两天后,我打开了我的Xcode,图标Tab Bar已经加宽了.

我试图删除并插入一个新的TabBar控制器,但它没有解决问题.我也创建了一个新项目,但它有同样的问题.这个问题也反映在模拟器中.

有没有办法来解决这个问题?

我的TabBar控制器的屏幕截图

interface-builder storyboard ios7 xcode5

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