编译

2020-02-10  本文已影响0人  滩主

符号决议

image.png
image.png
image.png

本质上整个符号表只是想表达两件事:
我能提供给其它文件使用的符号
我需要其它文件提供给我使用的符号

image.png
image.png
// add.c
int global_x = 256;
char global_c = 'a';

int add(int a,int b)
{
    return a+b;
}
// gcc -c add.c
// readelf -h add.o
// readelf -a add.o
//  readelf -S add.o
// readelf -r add.o
// readelf -x .text add.o
// dumpelf add.o

事关右值

#include <stdio.h>
#include <string>

int main()
{
  std::string str = "hello!";
  printf("%p %p\n",&str[0],&str);

  std::string&& r = std::move(str);
  printf("%p\n",&r[0]);

  // 短字符串直接存储在栈上,没有new
  std::string str2(std::move(str));
  str[0] = 'H';
  printf("%p %p\n",&str2[0],&str2);
  printf("%s\n",&str2[0]);

  std::string long_str = "sdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfweljlnjaljasdf";
  printf("%p %p\n",&long_str[0],&long_str);
  //std::string long_str2(std::move(long_str));
  std::string long_str2 = std::move(long_str);
  printf("%p %p\n",&long_str2[0],&long_str2);

  return 0;
}
#include <utility>
#include <string>
#include <iostream>
#include <vector>
#include <stdio.h>

int main()
{
    std::string str = "Helloaaaaaaaaaaaaaaaaaaaaaaaaa";
    printf("%p\n",&str[0]);
    std::vector<std::string> vec;

    vec.push_back(str);
    vec.push_back(std::move(str));
    printf("%p\n",&vec[1][0]);

    return 0;
}

https://segmentfault.com/a/1190000016433829
https://blog.csdn.net/daide2012/article/details/73065204

上一篇下一篇

猜你喜欢

热点阅读