我对在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) 是否可以像使用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++中实现相同的效果?
我希望实现一个(双重)链接列表,它只在placement new内部调用,将所有内存定向到一个分配有以下内容的池:
char *memPool = new char[4096]; // One-off normal 'new'
Run Code Online (Sandbox Code Playgroud)
最初我打算实现我自己的类,它接受一个(管理一个)预分配内存池的指针.但是我想首先确定我无法达到同样的结果std::list.特别是,DavidRodríguez对这个SO问题的回答的第三部分让我担心.
它使这个意义上说std::list必须调用new和delete其组件节点,但我想修改此行为,使所有节点与被分配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如果我也想在自定义内存池中使用它们.)
我正在编写一个算法来查找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多少?如果无法在运行时优化乘法,那么我可以删除搜索包含零的行/列的逻辑.
假设我有一个生成随机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)
但感觉必须有比这更好的方法.
我正在寻找typedef我自己的算术类型(例如Byte8,Int16,Int32,Float754等),目的是确保它们包含特定数量的位(并且在浮点数的情况下,遵循IEEE754格式).我怎样才能以完全跨平台的方式做到这一点?
我已经在这里和那里看到了C/C++标准的片段,并且有很多:
" 类型是至少 X字节"
并不是很多:
" 类型是恰好 X字节".
鉴于这typedef Int16 unsigned short int可能不一定会导致16位Int16,是否有一种跨平台的方式来保证我的类型将具有特定的大小?
考虑一种情况,即故事板文件中的对象链接到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,然后在我的最新项目中我忘记了它,令我惊讶的是,它仍然完全符合预期.
如果我有一个定义的结构,如下所示:
struct blank {
int : 0;
};
Run Code Online (Sandbox Code Playgroud)
编译器会在运行时将其优化为零吗?
我问,因为这个相当受欢迎的SO问题.我想在我自己的C/C++代码中使用类似的编译时检查.我正在尝试使程序尽可能最佳,所以如果我只是将它们用于编译时检查,我不希望这些空结构在运行时闲置.
另一方面,是否有一种C++ - 惯用的方式来实现与链接相同的结果?
我知道这个想法完全打破了封装,但是说我有以下类扩展:
@interface MyClass () {
int reallyImportantIvar;
}
// ...
@end
Run Code Online (Sandbox Code Playgroud)
通常,类的行为应该在Objective-C层内部 - 发送和接收消息等.但是有一个('公共')子例程,我需要最好的性能和非常低的延迟,所以我更喜欢使用一个C方法.当然,如果我这样做,我就无法再访问reallyImportantIvar,这是我的性能关键任务的关键.
看来我有两个选择:
我的问题是:选项2是否可能,如果可行,它的开销是多少?(例如,我还在查看O(n)算法来查找类的实例变量吗?)
Tab Bar有问题.两天后,我打开了我的Xcode,图标Tab Bar已经加宽了.
我试图删除并插入一个新的TabBar控制器,但它没有解决问题.我也创建了一个新项目,但它有同样的问题.这个问题也反映在模拟器中.
有没有办法来解决这个问题?
c++ ×5
objective-c ×3
c ×2
c++11 ×2
arrays ×1
assembly ×1
block ×1
compile-time ×1
dwarf ×1
ios ×1
ios7 ×1
lambda ×1
list ×1
mach-o ×1
macos ×1
optimization ×1
storyboard ×1
struct ×1
swift ×1
typedef ×1
types ×1
uistoryboard ×1
x86-64 ×1
xcode5 ×1