我的gcc版本是4.8.3 20140624.我可以使用is_pod,is_trivial,is_standard_layout,但尝试失败时is_trivially_copyable,is_constructible和is_default_constructible,也许更多.错误消息是'xxx' is not a member of 'std'.
这有什么问题?它们甚至得到当前海湾合作委员会的支持吗?谢谢!
在一些读数之后,我理解编译器已经对结构或类进行了填充,以便可以在其自然对齐的边界上访问每个成员.那么在什么情况下编码人员需要明确调整以获得更好的性能?我的问题来自于此:
英特尔64和IA-32 Architechtures参考手册:
For best performance, align data as follows:
Align 8-bit data at any address.
Align 16-bit data to be contained within an aligned 4-byte word.
Align 32-bit data so that its base address is a multiple of four.
Align 64-bit data so that its base address is a multiple of eight.
Align 80-bit data so that its base address is a multiple of sixteen.
Align 128-bit data so that its base address is a multiple of sixteen.
Run Code Online (Sandbox Code Playgroud)
所以假设我有一个结构: …
假设我有两个指针:
char* p1 = nullptr;
char* p2 = std::malloc( 4 );
std::size_t offset = p2 - p1;
Run Code Online (Sandbox Code Playgroud)
以这种方式获得抵消是否安全?到目前为止它在我的电脑上工作正常.但我想知道偏移是否可以超过size_t的最大数量,以致此方法失败?
我不是在询问makefile.我有多个.cpp文件用于测试目的.所以在终端,我需要写:
g++ test1 -o run1
g++ test2 -o run2
...
Run Code Online (Sandbox Code Playgroud)
如果.cpp文件被更改,那么我将不得不再次运行上述命令.这种情况有解决方案吗?谢谢!
我以为makefile无法实现这个目标.这就是我这样问的原因.我将完整地保留上述问题.下面是我的makefile,我应该如何为多个文件更改它?
GCC=g++
GFLAGS=-Wall -g -std=c++11 -O3
SRC=./test1.cpp
OUT= test1.out
g:
$(GCC) $(GFLAGS) $(SRC) -o $(OUT)
clean:
rm -rf $(OUT) ./*~ ./*.o
Run Code Online (Sandbox Code Playgroud)