libc++

Why does libc++'s implementation of shared_ptr use full memory barriers instead of relaxed?

别说谁变了你拦得住时间么 提交于 2021-02-17 12:22:38
问题 In boost's implementation of shared_ptr , it uses relaxed memory ordering to increment its reference count. This appears safe as decrements use acquire/release to make sure that any previous decrements are visible to the thread before releasing memory. This method seems correct and appears in Herb Sutters talk on atomics In libc++'s implementation uses full memory barriers template <class T> inline T increment(T& t) _NOEXCEPT { return __sync_add_and_fetch(&t, 1); } template <class T> inline T

cmake detect which library libc++ or libstdc++ is configured to be used against g++ or clang++

╄→гoц情女王★ 提交于 2021-02-05 06:43:05
问题 I wrote an CMakeLists.txt to build a project with either g++ or clang++ . To catch as many as possible bugs I use both libc++ with -D_LIBCPP_DEBUG2=2 (for clang++ ) and libstdc++ with -D_GLIBCXX_DEBUG (for both g++ and clang++ ). set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -fno-inline -DDEBUG=1 -march=x86-64 -mtune=generic") #[[ if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_LIBCPP_DEBUG2=2") elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") set

clang++ 3.2 linker not finding C++ stdlib

做~自己de王妃 提交于 2021-01-27 03:54:01
问题 I've installed clang 3.2 on my Ubuntu 13.04 machine, and have compiled and built libc++, and everything is in place. However, when I try to link my (really simple) code, the linker reports that references to std::cout etc. are undefined. If anyone could advise me what I could do to solve this, I'd be very grateful -- I've tried everything I can think of. The commands and output are here: $ clang++ -v -stdlib=libc++ -lpthread -ldl sqlite3/sqlite3.o src/world.o -o bin/world Ubuntu clang version

clang++ 3.2 linker not finding C++ stdlib

被刻印的时光 ゝ 提交于 2021-01-27 03:50:39
问题 I've installed clang 3.2 on my Ubuntu 13.04 machine, and have compiled and built libc++, and everything is in place. However, when I try to link my (really simple) code, the linker reports that references to std::cout etc. are undefined. If anyone could advise me what I could do to solve this, I'd be very grateful -- I've tried everything I can think of. The commands and output are here: $ clang++ -v -stdlib=libc++ -lpthread -ldl sqlite3/sqlite3.o src/world.o -o bin/world Ubuntu clang version

PHP7源码之array_unique函数分析

依然范特西╮ 提交于 2021-01-13 14:59:06
以下源码基于 PHP 7.3.8 array array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_unique — 移除数组中重复的值 参数说明: array:输入的数组。 sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值: SORT_REGULAR - 按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字形式比较 SORT_STRING - 按照字符串形式比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 array_unique 函数的源代码在 /ext/standard/array.c 文件中。由于 PHP_FUNCTION(array_unique){ // code... } 篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。 定义变量 zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING; //

PHP7源码之array_unique函数分析

血红的双手。 提交于 2021-01-13 11:00:26
以下源码基于 PHP 7.3.8 array array_unique ( array array[,intarray[,intsort_flags = SORT_STRING ] ) (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_unique — 移除数组中重复的值 参数说明: array:输入的数组。 sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值: SORT_REGULAR - 按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字形式比较 SORT_STRING - 按照字符串形式比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 array_unique 函数的源代码在 /ext/standard/array.c 文件中。由于 PHP_FUNCTION(array_unique){ // code... } 篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。 定义变量 zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING;

How to specify custom libc++

社会主义新天地 提交于 2020-12-30 09:45:36
问题 I have built libc++ and want to use it when compiling my program ? so I have something like clang++ -stdlib=~/libc++/libc++.so main.cpp but this does not work. How can use my custom built libc++ when building the application? 回答1: This information comes from llvm documentation about libcxx. If you want to use a custom libc++ with clang you have to specify argument like this : $ clang++ -std=c++11 -stdlib=libc++ -nostdinc++ -I<path_to_libcxx>/include/c++/v1 -L<path_to_libcxx>/lib -Wl,-rpath,

Android NDK中的c++ STL

心不动则不痛 提交于 2020-11-28 13:13:42
田海立@CSDN 2020-11-25 Android NDK(Native Development Kit)提供了一套基于c/c++开发Android应用的工具。基于c/c++开发需要STL (Standard Template Library/标准模版库),本文描述Android NDK中提供的STL。 Android NDK开发是基于Android的,但是不绑定具体某一个Android版本,一个NDK发布版可以支持多个Android版本。 NDK开发无论静态库还是动态库,libc++都是用NDK里的发布版本打包在应用里:动态库直接在apk里带上libc++_shared.so;静态库已经把程序需要的STL的代码直接打到应用程序或其所用的native库里。 一、Android NDK中的c++运行库 Android NDK中提供下列c++运行库。 其中的各个运行库: libc++ :是LLVM c++标准库。从NDK r18之后是唯一的STL(GNU stl和stlport从 r18开始从NDK中被移除) NDK里提供了libc++的动态库和静态库: - 动态库: libc++_shared.so - 静态库: libc++_static.a 注意: 虽然都是LLVM的c++ STL,此处NDK里的libc++不是Android源码中编译出的c++系统STL(libc++.so

c++之函数值传递和引用传递解析----关键在于理解函数return的实现机制(内存分配)

梦想与她 提交于 2020-10-28 07:29:31
函数调用过程解析 func里的a存储在调用 f un函数 时开辟的栈 空间 里,这块栈只在调用func时对func可用,调用结束后返回的a,其实是暂存在寄存器里的(一般情况下是eax),而返回到main里时,main又会把返回的值 拷贝 到自己所有的栈空间里(在这里是以临时变量的形式)。所以不管是func还是main,任何非static、register变量和 常量 的存储都是在 函数 的 局部 存储区里(也就是对当前调用函数可见的栈空间)。main也是一个函数。 1、函数调用完就收回; 2、不是,栈是一段公共 内存 ,函数的 代码 也不是存在栈里的,只是从栈上给新调用的函数分配一段栈空间,用来保存这个函数执行期间用到的局部变量; 3、函数的返回是被保存在寄存器里的(这个返回指的是return,不包括通过 参数 返回或者全局变量),栈空间由 程序 自动维护,函数退出以后栈的内容其实不会更改,只是栈 指针 复位,所以函数 内部 的局部变量声明了如果不赋值,它的值就是随机的也就是这个道理。 内存分配、函数调用和返回值问题 首先,常量与变量 变量:在程序中可以改变值的量;常量:其值不能改变; 内存分配 C++编译器将计算机内存分为: 代码区 :代码区就是存放程序代码 数据区 :数据区就是存放程序编译与执行过程中出现的变量与常量 静态数据区 :在编译器进行编译的时候就为该变量分配的内存